我有一个子表单,我通过 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;
}
});
谢谢你的见解,很有帮助。
(我会投你的票,但我没有代表)
1条答案
按热度按时间yc0p9oo01#
Drupal.attachBehaviors()
是在Drupal7中手动附加行为的方法您可以在此处查看https://drupal.org/node/1143768以供参考。
更新
AttachBehaviours被调用完成任何 AJAX 请求。
假设您正在使用某个构造函数对象来附加事件、处理事件和其他一些东西,如
如果您不想使用上述附加行为,则可以使用
Drupal.attachBehaviours(new Drupal.MyMenuList())
再次应用相同的行为。