什么是初始化drupal崩溃行为的正确方法

时间:2014-01-24 18:34:38

标签: jquery drupal-7 collapse

我有一个子表单,我通过ajax获取并附加到我的主表单。在服务器端,我将子表单包装在一个带有'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'));

但未正确应用该行为。

那么手动初始化此行为的正确方法是什么?

TIA

我想我已经明白了:

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

THanks prabeen giri! 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;
    }
  });

感谢您的见解。非常有帮助。

(我向你投票,但我没有代表)

1 个答案:

答案 0 :(得分:0)

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())再次应用相同的行为。