发布于 2010-10-15 18:54:06
长版本: Drupal.behaviors不是jQuery.ready的简单替代,因为后者只运行一次(当DOM准备好操作时):行为可以在页面执行期间触发多次,并且可以在文档中插入新的DOM元素时运行。
此外,模块可以覆盖或扩展现有行为(例如,如果一个模块具有在所有链接上添加反弹效果的行为,则第二个模块可以用不同的反弹效果替换该行为)。
简而言之:它更加模块化,尽管文档还可以改进。
此外,从Drupal7开始,使用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);
});
};
如果您的一个脚本(或另一个)创建了新节点,它仍然可以将行为应用于新节点,而不必知道iinstalled还安装了哪些其他模块:
var newNodes = $('<a href="#">Hello</a> <a href="#">World</a>').appendTo('#someDiv');
Drupal.attachBehaviors(newNodes);
发布于 2013-09-27 00:15:31
重复功能
请注意,Drupal.behaviors架构复制了jQuery中已有的功能。
此外,在撰写本文时,除了本身的之外,似乎还没有任何文档或案例研究 Drupal.behaviors ;并且Drupal内的文档(如上所述)可以从改进中获得相当大的好处。在撰写本文时,主要的详细文档似乎仅限于收费访问。
这意味着您可能会注意到性能下降、异常和与标准jQuery不一致的意外结果,这些都是Drupal.behaviors生态系统所特有的。
本机jQuery功能
与Drupal.behaviors形成对比的是,标准jQuery应用程序接口的内置功能是广泛记录的,包括内联演示和示例。此外,在jsfiddle等网站上也有大量免费的实时示例。
“请参阅”部分中的链接列举了与处理插入到文档中的新DOM元素相关的jQuery应用编程接口调用。
另请参阅
发布于 2016-02-28 17:26:35
除了上面提到的答案,关键的一点是您可以将数据从php传递到javascript,如下所示
使用"Drupal.settings“将值从PHP传递到Javascript
您可以使用drupal_add_js()函数通过Drupal.settings在前端轻松地将PHP中的变量提供给Javascript
<?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!');
}
https://stackoverflow.com/questions/3941426
复制相似问题