web-dev-qa-db-fra.com

Comportements d'attachement de Drupal: réagir sur tout le contenu nouvellement chargé?

J'ai deux modules différents qui, à bien des égards, fonctionnent ensemble. Une des choses sur lesquelles ils travaillent ensemble est que le module A charge le contenu via AJAX et que le module B doit attacher des écouteurs d'événements au contenu chargé.

Cependant, il semble que lorsque le contenu est chargé via AJAX par le module A, seule la fonction 'attach' de Drupal.behaviours.a est invoquée, et non le ' attach ', fonction de Drupal.behaviours.b. Les deux fonctions sont invoquées au chargement de la page, mais pas au chargement de contenu suivant 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');
  }
}    

Comment puis-je faire en sorte que la fonction "attach" de Drupal.behaviours.b s'exécute à chaque fois qu'un module charge un nouveau contenu?

12
sbrattla

Ceci, à partir des commentaires dans misc/drupal.js, explique comment il est censé fonctionner:

  • Drupal.attachBehaviors est ajouté ci-dessous à l'événement prêt jQuery et ainsi
  • s'exécute au chargement initial de la page. Les développeurs implémentant AHAH/Ajax dans leur
  • les solutions doivent également appeler cette fonction après que le nouveau contenu de la page a été
  • chargé, alimentant un élément à traiter, afin de fixer tous les
  • comportements au nouveau contenu.
4
lazysoundsystem

Essayez d'ajouter ceci dans Drupal.behavior.b:

Drupal.attachBehaviors($(this));
2
Nanak