wil*_*aks 81
长版本:Drupal.behaviors不仅仅是jQuery.ready的替代品,因为后者只运行一次(当DOM准备好进行操作时):行为可以在页面执行期间多次触发,并且可以在插入新的DOM元素时运行该文件.
此外,模块可以覆盖或扩展现有行为(例如,如果一个模块具有在所有链接上添加反弹效果的行为,则第二个模块可以通过不同的反弹效果替换行为).
简短版本:它更模块化,但文档可以改进.
此外,从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);
});
};
Run Code Online (Sandbox Code Playgroud)
如果您的某个脚本(或其他脚本)创建了新节点,它仍然可以将行为应用于新节点,而无需知道安装了哪些其他模块:
var newNodes = $('<a href="#">Hello</a> <a href="#">World</a>').appendTo('#someDiv');
Drupal.attachBehaviors(newNodes);
Run Code Online (Sandbox Code Playgroud)
重复功能
请注意,Drupal.behaviors体系结构重复了jQuery中已有的功能.
此外,在撰写本文时,似乎没有针对Drupal本身之外的 Drupal.behaviors的任何文档或案例研究 ; Drupal中的文档(如上所述)可以从改进中获益.在撰写本文时,似乎主要的详细文档仅限于限制访问.
这意味着您可能会注意到与 Drupal.behaviors生态系统特有的标准jQuery不一致的性能降级,异常和意外结果.
本机jQuery功能
与Drupal.behaviors相比,标准jQuery API的内置功能得到了广泛的记录,包括内联演示和示例.此外,jsfiddle等网站上有许多免费提供的实例.
see also部分中的链接枚举了与处理插入到文档中的新DOM元素相关的jQuery api调用.
也可以看看
小智 6
除了上面提到的关键事项的答案,你可以将数据从php传递到javascript,如下所示
使用"Drupal.settings"将值从PHP传递到Javascript
使用drupal_add_js()函数,您可以使用Drupal.settings轻松地将PHP中的变量用于前端的Javascript
<?php
drupal_add_js(array('myModule' => array('key' => 'value')), 'setting');
?>
Run Code Online (Sandbox Code Playgroud)
要么
<?php
$element['#attached']['js'][] = array(
'type' => 'setting',
'data' => array('myModule' => array('key' => 'value')),
);
?>
Run Code Online (Sandbox Code Playgroud)
这将在Javascript中提供:
if (Drupal.settings.myModule.key === 'value') {
alert('Got it!');
}
Run Code Online (Sandbox Code Playgroud)