我有一个定制的Drupal 7模块,它执行邮政编码查找以返回城镇和县。我在回调中将Drupal.settings.zip_code_success设置为true。这是我正在使用的代码。
drupal_add_js(array('zip_code_success' => TRUE), 'setting');
$commands = array();
$commands[] = ajax_command_html('#triage_city', $out);
return array(
'#type' => 'ajax',
'#commands' => $commands,
);
然后,在js端运行的一些处理代码中可以获得zip_code_success值。
在将内容转移到Drupal 8时,查找和html替换都很好,但我不知道如何将zip_code_success信息输入drupalSettings。drupalSettings在初始页面生成中进行设置,并在DOM中显示最初通过hook_preprocess_html函数传递的值。我在but代码查找函数中尝试了很多东西,但是没有能够更新drupalSettings。下面是当前的D8代码片段,可与上面的D7进行比较:
$response->addCommand(new SettingsCommand(['zip_code_success'=>TRUE] ,TRUE));
$response->addCommand(new HtmlCommand('#triage_city', $out));
return $response;
我也试过:
$response->setAttachments([
'library' => ['core/drupalSettings'],
'drupalSettings' => ['zip_code_success' => TRUE]
]);
$response->addCommand(new HtmlCommand('#triage_city', $out));
return $response;
对于如何处理这种情况,有什么智慧吗?
发布于 2018-07-16 01:48:03
在Drupal 8中,正如您所发现的,drupal_add_js()已经被删除。
你需要做两件事:
1)不能在ajax回调中添加JS。这在D7中是一个糟糕的实践,在D8中根本无法实现。您需要在表单定义中添加JS,而不是ajax回调。
2)通过两步过程添加JS。第一个是中创建一个新库。*.libraries.yml文件。向核心/药物设置添加一个依赖项。然后,在表单定义中添加如下设置:
$form['some_element'] = [
'#markup' => '', // required to render the element
'#attached' => [
'libraries' => [
'some_library', // The library you created
],
'drupalSettings' => [
'modulename' => [
'zip_code_success' => TRUE,
],
],
],
];
https://drupal.stackexchange.com/questions/265823
复制相似问题