更好地了解Drupal行为


51

今天,我了解了Drupal的行为,并尝试编写以下代码。

(function ($) {

  Drupal.behaviors.mymodule = {
    attach: function (context, settings) {
      $('#mymodule_id', context).change(function () {
        alert('Handler for .change() called.');
      });
    }
  };

}(jQuery));
  • Drupal.behaviors.mymodule名称空间吗?
  • 传递给Drupal行为的上下文和设置参数是什么?
  • 这等于document.ready()吗?
  • 我可以附加任何功能吗?
  • 我可以定义将在某处调用的JavaScript函数吗?

这从Lullabot的博客中做了解释的概念围绕JS行为的一个伟大的工作:lullabot.com/articles/...
史蒂夫Persch

Answers:


56

简而言之,与“行为”相比,“行为”的优势document.ready()在于它们会自动重新应用于通过AJAX加载的任何内容。mymodule是您的名称空间,该名称空间必须是唯一的。context是适用于此页面的一部分,例如已使用AJAX更新的表单的一部分。您可以附加多个行为,但是我认为您需要为每个行为使用唯一的名称(mymodule)。

请查看以下资源以获取更多信息:


2

简单来说,Drupal.behaviors是一种更好的实施方式jQuery.ready

与之不同jQuery.ready的是,在DOM准备就绪时,它仅运行一次,而Drupal.behaviors在页面执行期间可以运行多次。

例如,在视图无限滚动中,当用户单击“加载更多”按钮时,将加载更多元素,因此DOM将在初始加载后发生变化。

如果我们想向新添加的元素添加类怎么办?在这里,Drupal行为很方便。

这些行为将在每个请求(包括AJAX请求)上执行。

当加载DOM以及由Ajax更改DOM时,Drupal将调用附加行为,传入两个参数

上下文设置

第一次调用Drupal.attachBehaviors()时,上下文变量包含表示DOM的文档对象,但是对于其余的调用,上下文将保留受影响的HTML。

设置包含通过PHP传递给JavaScript的信息,类似于通过Drupal.settings访问它。

此外,模块也可以调用Drupal.attachBehaviors()。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.