Поведінка Друпала, що стосується прихильності: реагувати на весь щойно завантажений контент?


12

У мене є два різних модулі, які багато в чому працюють разом. Однією з речей, над якими вони працюють разом, є те, що модуль 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 запускалася кожного разу, коли будь-який модуль завантажує новий вміст?


Ви намагалися додати Drupal.attachBehaviors();до зворотного дзвінка ajax успіх?
Клайв

Ні, але чи не слід опікуватися цим автоматично? Я думав, що це вся ідея функції «прив’язати»; що його слід викликати під час завантаження сторінки та оновлення сторінки? Однак здається, що при оновленні сторінки викликається лише функція "приєднати" модуль, який викликає?
sbrattla

Це було моє розуміння, так, я ніколи ще не надто глибоко заглядав у це. Я знаю, що були випадки, коли після дзвінка AJAX мені потрібно було повторно встановити поведінку, тому я просто припустив, що потрібно
Клайв

Дивлячись на drupal.js: "Drupal.attachBehaviors додано нижче до події готової jQuery і так працює при початковому завантаженні сторінки. Розробники, що впроваджують AHAH / Ajax у своїх рішеннях, повинні також викликати цю функцію після завантаження нового вмісту сторінки, подаючи в елемент, який потрібно обробити, щоб приєднати всю поведінку до нового вмісту. " Здається, що мені потрібно покликати себе на прихильність поведінки. Але; мене спантеличує, що функція "приєднати" модуля A працює, навіть якщо я не викликав прикріпленняBehaviours у зворотному звороті AJAX успіху ...? Чому саме для модуля виклику, а не для всіх модулів?
sbrattla

1
Якщо ви хочете, щоб все-таки вирішити проблему $('body').ajaxSuccess(Drupal.attachBehaviors);, можливо, спрацює
Clive

Відповіді:


4

Це, з коментарів до misc/drupal.js, пояснює, як це має працювати:

  • Drupal.attachBehaviors додано нижче до події jQuery Ready тощо
  • працює при початковому завантаженні сторінки. Розробники, що впроваджують AHAH / Ajax у своїх
  • рішення також повинні викликати цю функцію після того, як з'явився вміст нової сторінки
  • завантажений, подаючи в елемент, який обробляється, щоб прикріпити все
  • поведінки до нового змісту.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.