У мене є два різних модулі, які багато в чому працюють разом. Однією з речей, над якими вони працюють разом, є те, що модуль A завантажує вміст через AJAX, і модуль B повинен приєднувати слухачів подій до завантаженого вмісту.
Однак, виявляється, що при завантаженні вмісту через AJAX модулем A викликається лише функція "приєднати" 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 запускалася кожного разу, коли будь-який модуль завантажує новий вміст?
Ні, але чи не слід опікуватися цим автоматично? Я думав, що це вся ідея функції «прив’язати»; що його слід викликати під час завантаження сторінки та оновлення сторінки? Однак здається, що при оновленні сторінки викликається лише функція "приєднати" модуль, який викликає?
—
sbrattla
Це було моє розуміння, так, я ніколи ще не надто глибоко заглядав у це. Я знаю, що були випадки, коли після дзвінка AJAX мені потрібно було повторно встановити поведінку, тому я просто припустив, що потрібно
—
Клайв
Дивлячись на drupal.js: "Drupal.attachBehaviors додано нижче до події готової jQuery і так працює при початковому завантаженні сторінки. Розробники, що впроваджують AHAH / Ajax у своїх рішеннях, повинні також викликати цю функцію після завантаження нового вмісту сторінки, подаючи в елемент, який потрібно обробити, щоб приєднати всю поведінку до нового вмісту. " Здається, що мені потрібно покликати себе на прихильність поведінки. Але; мене спантеличує, що функція "приєднати" модуля A працює, навіть якщо я не викликав прикріпленняBehaviours у зворотному звороті AJAX успіху ...? Чому саме для модуля виклику, а не для всіх модулів?
—
sbrattla
Якщо ви хочете, щоб все-таки вирішити проблему
—
Clive
$('body').ajaxSuccess(Drupal.attachBehaviors);
, можливо, спрацює
Drupal.attachBehaviors();
до зворотного дзвінка ajax успіх?