什么是正确的方式来初始化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())
再次应用相同的行为。