Drupal行为

Sho*_*waz 57 jquery drupal drupal-6

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

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)


dre*_*mac 7

重复功能

请注意,Drupal.behaviors体系结构重复了jQuery中已有的功能.

此外,在撰写本文时,似乎没有针对Drupal本身之外的 Drupal.behaviors的任何文档或案例研究 ; Drupal中的文档(如上所述)可以从改进中获益.在撰写本文时,似乎主要的详细文档仅限于限制访问.

这意味着您可能会注意到 Drupal.behaviors生态系统特有的标准jQuery不一致的性能降级,异常和意外结果.

本机jQuery功能

与Drupal.behaviors相比,标准jQuery API的内置功能得到了广泛的记录,包括内联演示和示例.此外,jsfiddle等网站上有许多免费提供的实例.

see also部分中的链接枚举了与处理插入到文档中的新DOM元素相关的jQuery api调用.

也可以看看

  • //在Drupal本身之外似乎没有Drupal.behaviors***的任何文档或案例研究***//(重点不是原文)请随意添加任何合理的澄清或更正,但断言你这里做的不准确.最重要的是,你遗漏了"Drupal本身之外"这几个字.如果有其他框架或项目已采用Drupal.behaviors,请随时在此处添加链接并提高答案的质量.就目前而言,添加内容并未反驳原始答案中的任何内容. (2认同)

小智 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)