Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Drupal行为 什么是Drupal行为 它为模块开发人员提供什么类型的服务层 它映射到jQuery.ready的关系类型是什么_Jquery_Drupal_Drupal 6 - Fatal编程技术网

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

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

Long version:Drupal.behaviors不仅仅是jQuery.ready的替代品,因为后者只运行一次(当DOM准备好进行操作时):在页面执行期间可以多次触发行为,并且可以在文档中插入新的DOM元素时运行

此外,模块还可以覆盖或扩展现有行为(例如,如果一个模块的行为是在所有链接上添加反弹效果,则第二个模块可以用不同的反弹效果替换该行为)

简短版本:它更加模块化,尽管文档可以改进


另外,从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()
      函数,您可以在前端使用Drupal.settings轻松地将PHP中的变量提供给Javascript

      <?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');
          });
        }
      }