什么是正确的方式来初始化Drupal崩溃行为

问题描述:

我有一个子窗体,我通过ajax获取并追加到我的主窗体。在服务器端,我使用'collapsible'和'collapsed'类将dulpal_render数组包装到fieldset中,然后将它传递回json(SOP)。在前端,我可以使用下面的代码获得了可折叠的行为:什么是正确的方式来初始化Drupal崩溃行为

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); 

SOLUTION

感谢prabeen义理! 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; 
    } 
    }); 

感谢您的见解。很有帮助。

(我给予好评你,但我没有REP)

Drupal.attachBehaviors()是手动附着在Drupal7

行为,您可以在这里看到https://drupal.org/node/1143768参考的方式。

更新

AttachBehaviours被调用任何Ajax请求的完成。因此,reinvokes内

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