Drupal行为

  • 什么是Drupal的行为呢?
  • 它为模块开发人员提供什么types的服务层?
  • 什么types的关系,它映射到jQuery.ready

长版本 :Drupal.behaviors不仅仅是jQuery.ready的替代品,因为后者只运行一次(当DOM准备好进行操作时):行为可以在页面执行期间被多次触发,并且可以在新DOM元素被插入时运行该文件。

此外,模块可以覆盖或扩展现有的行为(例如,如果一个模块具有在所有链接上添加反弹效果的行为,则第二个模块可以通过不同的反弹效果replace该行为)。

简短的版本 :它更模块化,虽然文件可以改进。


另外,从Drupal 7开始,使用drupal_add_js (PHP)或Drupal.settings.modulename (Javascript)定义的设置直接作为第二个参数(第一个是上下文)传递给行为。

例如:

 Drupal.behaviors.changeLinks = function(context, settings){ if (!settings) settings = Drupal.settings.changeLinks; $("a", context).hover(function() { $(this).css('color', settings.color); }); }; 

如果其中一个脚本(或另一个脚本)创build了新的节点,那么它仍然可以将这些行为应用到新的节点,而无需知道还有哪些其他模块已安装:

 var newNodes = $('<a href="#">Hello</a> <a href="#">World</a>').appendTo('#someDiv'); Drupal.attachBehaviors(newNodes); 

重复的function

请注意,Drupal.behaviors架构重复了jQuery中的function

另外,在撰写本文时, Drupal本身之外的 Drupal.behaviors 也没有任何文档或案例研究 。 而Drupal中的文档(如上所述)可以从改进中获益。 在撰写本文时,似乎主要的详细文档是受限的 – 只能访问费用。

这意味着您可能会注意到性能下降,exception以及 Drupal.behaviors生态系统特有的标准jQuery不一致的意外结果。

原生jQueryfunction

与Drupal.behaviors相比,标准jQuery API的内置function被广泛logging,包括在线演示和示例 。 而且,在jsfiddle等网站上可以免费获得大量现场示例。

另请参阅部分中的链接列举与处理插入到文档中的新DOM元素相关的jQuery api调用。

也可以看看

随着上面提到的关键的东西的答案是你可以传递数据从PHP到JavaScript,如下所示

通过“Drupal.settings”将值从PHP传递给Javascript

您可以使用drupal_add_js()函数轻松地将variables从PHP提供到前端的Javascript中,同时使用Drupal.settings

 <?php drupal_add_js(array('myModule' => array('key' => 'value')), 'setting'); ?> 

要么

 <?php $element['#attached']['js'][] = array( 'type' => 'setting', 'data' => array('myModule' => array('key' => 'value')), ); ?> 

这将在Javascript中可用:

  if (Drupal.settings.myModule.key === 'value') { alert('Got it!'); } 

寻找类似的答案,到达这里,仍然没有线索。 最后从这里的一篇文章中find了更多的解释(和例子): https : //benmarshall.me/drupal-behaviors/

我不是原作者,所以我只能引用一些文字:

什么是Drupal行为?

简而言之,Drupal.behaviors是实现jQuery.ready更模块化和更好的方法。 与jQuery.ready不同,当DOM准备好进行操作时,只运行一次,Drupal.behaviors可以在页面执行过程中多次运行。 更好的是,只要将新的DOM元素插入到文档中(即AJAX驱动的内容),就可以运行它们。

Drupal.behaviors也可以覆盖甚至扩展现有的行为。 所以举个例子,如果一个模块行为在所有链接上增加了一个弹跳效果,另一个模块可以用一个不同的弹跳效果replace这个行为。

Drupal.behaviors(从Drupal 7开始)的另一个额外的好处是能够使用drupal_add_js(PHP)或Drupal.settings.modulename(JS)并将设置作为第二个参数(第一个是上下文)传递给行为。