【问题标题】:Drupal 8 Drupal.behaviors without jquery没有 jquery 的 Drupal 8 Drupal.behaviors
【发布时间】:2018-07-19 01:12:51
【问题描述】:

有没有办法在 Drupal 8 中不调用 jquery 的情况下将 drupal 行为添加到主题?

这是教程显示的内容:

(function ($, Drupal) {
  Drupal.behaviors.myModuleBehavior = {
    attach: function (context, settings) {
      $('input.myCustomBehavior', context).once('myCustomBehavior').each(function () {
        // Apply the myCustomBehaviour effect to the elements only once.
      });
    }
  };
})(jQuery, Drupal);

但我想使用纯js而不调用jquery,像这样:

(function (Drupal) {
  Drupal.behaviors.myModuleBehavior = {
    attach: function (context, settings) {
      context.querySelector('input.myCustomBehavior').classList.add('processed');
    }
  };
})(Drupal);

我知道模块可能会自行调用 jquery,但如果可能的话,我仍然希望将它从我的脚本中删除,并且仍然让它在 ajax 事件之后运行。

谢谢

【问题讨论】:

  • 你试过你的第二个代码块了吗?它有效吗?如果不是,它会给出错误吗?

标签: javascript drupal drupal-8 pure-js


【解决方案1】:

你试过了吗?

我也不知道,所以去调查了。

Drupal 似乎不再依赖 jQuery 的 document.ready 来触发行为。
this change record 所示。

这让我相信您发布的第二个代码块应该可以工作(使用 Drupal 8.x)。

【讨论】:

  • 我已经尝试了我写的多个版本,但没有成功,你发现的看起来很有希望,但我找不到让它工作的方法,domready(function () { });(function () {}); 的工作方式相同,但它在 ajax 或 bigpipe 之后无法工作我也找到了domready(function () { Drupal.attachBehaviors(document, drupalSettings);}); ,但我找不到如何正确实施。
  • 最后你的回答让我明白了。事实证明,bigpipe 需要 jquery,因此它与我对 js 所做的事情背道而驰,当我禁用 bigpipe 时,它​​导致它失败,第二个代码块刚刚用 ajax 罚款。谢谢
  • Bigpipe 确实依赖于 jQuery,如 the source 所示。这让我很难过:(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-28
  • 2015-11-11
  • 1970-01-01
  • 2020-05-01
  • 1970-01-01
  • 2018-03-16
  • 1970-01-01
相关资源
最近更新 更多