我正在尝试适应Drupal8.5中引入的相对新的离开画布对话框。
建议将其与Drupal Form-API和如下链接元素一起使用:
$form['off_canvas'] = [
'#title' => 'Some title',
'#type' => 'link',
'#url' => \Drupal\Core\Url::fromRoute('some route'),
'#attributes' => [
'class' => ['use-ajax'],
'data-dialog-type' => 'dialog',
'data-dialog-renderer' => 'off_canvas',
'data-dialog-options' => \Drupal\Component\Serialization\Json::encode(['width' => '40%']),
],
'#attached' => [
'library' => [
'core/drupal.dialog.ajax',
],
],
];这是非常直接和开箱即用的,但是对于一个非常特殊的用例,我需要附加一个AJAX回调和一个按钮元素,在查看Drupal规范时不可能使用一个链接元素。
这就是我尝试使用一个按钮元素和一个带有离开画布对话框功能的回调:
$form['some_button'] = [
'#type' => 'button',
'#value' => 'some value',
'#attached' => [
'library' => [
'core/drupal.dialog.ajax',
],
],
'#ajax' => [
'callback' => '::some_callback',
],
];回调函数位于以下位置:
public function some_callback(&$form, FormStateInterface $form_state) {
$response = new \Drupal\Core\Ajax\AjaxResponse();
$title = 'Some title';
$content = 'Some content';
$options = [];
$response->addCommand(new \Drupal\Core\Ajax\OpenOffCanvasDialogCommand($title, $content, $options));
return $response;
}有趣的是:一旦使用$form['off_canvas']初始化了off画布对话框,它就可以同时处理$form['off_canvas']和$form['some_button']的两个元素。在pageload上,它为$form['some_button']使用旧对话框,为$form['off_canvas']使用新的off画布对话框。
所以这一定是$form['some_button]的初始化问题。但是,我无法让它与页面负载的off画布对话框一起工作,而新的off画布功能的文档非常少见。
我试图告诉$form['some_button']在很多方面使用off画布作为参数,但它不起作用。我想我漏掉了一些东西。
你们能给我一个提示吗,从一开始就使用一个带有Ajax回调的按钮来完成这个任务?
发布于 2018-11-16 09:33:29
回到这个问题时,我确实注意到,在升级到最新的Drupal8.6.3之后,奇怪的行为已经消失。所有操作都如预期的那样,甚至使用一个按钮。
我无法从上面重现这种行为/错误。
发布于 2021-07-27 14:03:38
如何将其调整为从javascript/jquery打开画布外对话框?我已经尝试过Drupal.dialog脚本,它只打开普通对话框。我还看到了Drupal.offCanvas {}脚本--它基本上是没有文档的。有什么建议吗?
https://drupal.stackexchange.com/questions/271371
复制相似问题