Drupal行为 什么是Drupal行为 它为模块开发人员提供什么类型的服务层 它映射到jQuery.ready的关系类型是什么
Long version:Drupal.behaviors不仅仅是jQuery.ready的替代品,因为后者只运行一次(当DOM准备好进行操作时):在页面执行期间可以多次触发行为,并且可以在文档中插入新的DOM元素时运行 此外,模块还可以覆盖或扩展现有行为(例如,如果一个模块的行为是在所有链接上添加反弹效果,则第二个模块可以用不同的反弹效果替换该行为) 简短版本:它更加模块化,尽管文档可以改进Drupal行为 什么是Drupal行为 它为模块开发人员提供什么类型的服务层 它映射到jQuery.ready的关系类型是什么,jquery,drupal,drupal-6,Jquery,Drupal,Drupal 6,Long version:Drupal.behaviors不仅仅是jQuery.ready的替代品,因为后者只运行一次(当DOM准备好进行操作时):在页面执行期间可以多次触发行为,并且可以在文档中插入新的DOM元素时运行 此外,模块还可以覆盖或扩展现有行为(例如,如果一个模块的行为是在所有链接上添加反弹效果,则第二个模块可以用不同的反弹效果替换该行为) 简短版本:它更加模块化,尽管文档可以改进 另外,从Drupal 7开始,使用Drupal\u add_js(PHP)或Drupal.setti
另外,从Drupal 7开始,使用Drupal\u 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);
});
};
如果脚本中的一个(或另一个)创建了新节点,它仍然可以将行为应用于新节点,而无需知道安装了哪些其他模块:
var newNodes = $('<a href="#">Hello</a> <a href="#">World</a>').appendTo('#someDiv');
Drupal.attachBehaviors(newNodes);
var newNodes=$('').appendTo('#someDiv');
附件行为(newNodes);
复制功能
请注意,Drupal.behaviors架构复制了jQuery中已有的功能
此外,在撰写本文时,似乎没有任何关于Drupal的文档或案例研究;Drupal中的文档(如上所述)可以从改进中获得很大的好处。在撰写本文时,主要详细文档似乎仅限于付费访问 这意味着您可能会注意到性能下降、异常和意外结果与Drupal.behaviors生态系统特有的标准jQuery不一致 原生jQuery功能 与Drupal.behaviors不同,标准jQuery API的内置功能被广泛记录,包括在线演示和示例。此外,在jsfiddle等网站上有许多免费的实例 see部分中的链接还列举了与处理插入文档中的新DOM元素相关的jQueryAPI调用 另请参见
- 寻找类似的答案,来到这里,仍然没有任何线索。最后从本文中找到了更多的解释(和示例):
我不是原作者,所以我只能引用一些文本:
什么是Drupal行为
简言之,Drupal.behaviors是一种更模块化、更好的方法
实现jQuery.ready。与jQuery.ready不同,jQuery.ready在以下情况下只运行一次
DOM已准备好进行操作,Drupal.behaviors可以运行
在页面执行期间多次执行。更好的是,它们可以运行
每当在文档中插入新的DOM元素时(即AJAX
受驱动的内容)
Drupal.behaviors还可以覆盖甚至扩展现有的
行为。例如,如果模块行为添加了反弹效果
在所有链接上,另一个模块可以使用
不同的反弹效果
Drupal.behaviors(从Drupal 7开始)的另一个额外好处是
能够使用drupal\u add\u js(PHP)或drupal.settings.modulename
(JS)和传递设置作为第二个参数(第一个是
(上下文)到行为
除了上面提到的答案之外,最关键的是您可以将数据从php传递到javascript,如下所示 使用“Drupal.settings”将值从PHP传递到Javascript 使用Drupal\u add\u js()
<?php
drupal_add_js(array('myModule' => array('key' => 'value')), 'setting');
?>
如果您的JavaScript需要在页面加载和AJAX请求后执行(在文档/html中添加了一些新元素),则可以使用Drupal行为 yourmodulename:这是您的名称空间,应该是唯一的。例如,这通常是模块的名称,但不是必需的 上下文:这实际上非常酷,在页面加载时,上下文将包含整个文档,在AJAX请求之后,将包含所有新加载的元素。通过这种方式,您可以将通过AJAX加载的内容与其他内容区别对待
设置:它包含通过PHP传递给JavaScript的信息,类似于通过Drupal.settings访问它 Drupal有一个“行为”系统,它提供了一种模块化的、更好的方式来附加JavaScript功能,以便在页面上放置元素。Drupal行为允许您覆盖或扩展现有行为。 这些Drupal行为是事件触发的程序,附加到要更改的页面元素。虽然行为可以附加到特定内容,但也会附加多个行为,并可以多次点燃,以便快速重拍 通过将逻辑附加到Drupal.behaviors来创建JavaScript。以下是从该页中选取的示例:
Drupal.behaviors.exampleModule = {
attach: function (context, settings) {
$('.example', context).click(function () {
$(this).next('ul').toggle('show');
});
}
}
) @JoshiConsultancy一般来说,对stackoverflow的有效回应包括直接回答,包括引用和参考文献的链接。大多数看到这个页面的人都是从搜索开始的,“这里似乎没有任何文档”很抱歉,但这是错误的。只需搜索“jquerydrupal.behaviors”,您将获得85k+的结果。以下是我的第一页上的一些内容:这里当然有改进的余地,但从目前的情况来看,您的答案是毫无帮助的。//似乎没有关于Drupal的任何文档或案例研究
if (Drupal.settings.myModule.key === 'value') {
alert('Got it!');
}
Drupal.behaviors.yourmodulename = {
attach: function (context, settings) {
// Code to be run on page load, and
// on ajax load added here
}
};
Drupal.behaviors.exampleModule = {
attach: function (context, settings) {
$('.example', context).click(function () {
$(this).next('ul').toggle('show');
});
}
}