我有两个不同的模块,它们在许多方面可以协同工作。他们共同努力的事情之一是,模块A通过AJAX加载内容,而模块B需要将事件侦听器附加到加载的内容上。
然而,似乎当内容是由模块A通过AJAX加载,只是的“附加”功能Drupal.behaviours.a被调用,而不是的“附加”功能Drupal.behaviours.b。这两个函数在页面加载时被调用,但在后续的AJAX内容加载时不被调用。
// This runs every time module A loads new content.
Drupal.behaviors.a = {
attach: function(context, settings) {
alert('a:attach');
}
}
// This only runs on page load, but never when module A loads new content.
Drupal.behaviors.b = {
attach: function(context, settings) {
alert('b:attach');
}
}
每当任何模块加载新内容时,如何使Drupal.behaviours.b的“附加”功能运行?
不,但是那不应该自动解决吗?我认为这就是“附加”功能的全部概念。应该在页面加载和页面更新时调用它?但是,看来页面更新仅调用了调用模块的“ attach”功能吗?
—
sbrattla 2012年
那是我的理解,是的,尽管我从未深入研究过。我知道有些时候,在AJAX调用之后,我需要重新附加行为,因此我以为是必需的
—
Clive
查看drupal.js:“ Drupal.attachBehaviors在下面添加到jQuery ready事件中,因此在初始页面加载时运行。在其解决方案中实现AHAH / Ajax的开发人员也应在加载新页面内容后调用此函数,并在以便将所有行为附加到新内容上。” 看来我需要自己调用attachBehaviours。但; 这使我感到困惑,即使我没有在AJAX成功回调中调用attachBehaviours,模块A的“ attach”功能仍在运行...?为什么只为调用模块而不是所有模块?
—
sbrattla 2012年
如果您想采用全面解决方案,
—
克莱夫(Clive)
$('body').ajaxSuccess(Drupal.attachBehaviors);
则可能会起作用
Drupal.attachBehaviors();
到ajax成功回调中?