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)并将设置作为第二个参数(第一个是上下文)传递给行为。