jquery 初始化drupal塌陷行为的正确方法是什么

5q4ezhmt  于 2022-11-29  发布在  jQuery
关注(0)|答案(1)|浏览(135)

我有一个子表单,我通过 AJAX 获取它并将其附加到我的主表单中。在服务器端,我将子表单 Package 在一个字段集中,并使用'collapsible'和'collapsed'类,drupal_render数组,然后将其传递回json(SOP)。在前端,我可以使用以下代码获得可折叠行为:

jQuery('#my-fieldset legend span').click(function(){
 Drupal.toggleFieldset(jQuery('#my-fieldset'));
});

这是可行的,但似乎不是正确的方法。我尝试使用以下代码附加行为:

Drupal.behaviors.collapse.attach(jQuery('#my-fieldset'), Drupal.settings);

Drupal.behaviors.collapse.attach(jQuery('#my-fieldset'));

但都没有正确应用该行为。
那么,手动初始化此行为的正确方法是什么呢?
短暂性脑缺血
我想我明白了:

Drupal.behaviors.collapse.attach(jQuery(document), Drupal.settings);

解决方案
谢谢你的赞美!Drupal.attachBehaviors更有意义...
我确实用drupal.attachBehaviors()进行了测试,但也许我没有正确使用它。我想我传递了一个jquery对象作为上下文,而不仅仅是选择器,正如你提到的示例帖子中所看到的,如果这有什么不同的话。我将进一步使用它。
我也不熟悉load()方法,它是我的传统方法的很好的简写...

jQuery.ajax({
    url: Drupal.settings.basePath + url,
    type: 'POST',
    data: data,
    dataType: 'json',
    success: function(response){
      if (response.status != undefined && response.data != undefined && response.status == 'ok') {
        callback(response.data);
      }
      return false;
    }
  });

谢谢你的见解,很有帮助。
(我会投你的票,但我没有代表)

yc0p9oo0

yc0p9oo01#

Drupal.attachBehaviors()是在Drupal7中手动附加行为的方法
您可以在此处查看https://drupal.org/node/1143768以供参考。

更新

AttachBehaviours被调用完成任何 AJAX 请求。

Drupal.behaviours.myModule = {
  attach : {
    // your code here 
    // Code here will get executed on page load and every ajax request 

      new Drupal.MyMenuList() // this will attache events and handles it 
  } 
}

假设您正在使用某个构造函数对象来附加事件、处理事件和其他一些东西,如

Drupal.MyMenuList  = function () { 
  $('#asdf').click(function() { 
    //
  });
}
Drupal.MyMenuList.prototype.click = function (){
  // event handler
}

如果您不想使用上述附加行为,则可以使用Drupal.attachBehaviours(new Drupal.MyMenuList())再次应用相同的行为。

相关问题