J'ai lu sur Drupal comportements aujourd'hui, et j'ai essayé d'écrire le code suivant.
(function ($) {
Drupal.behaviors.mymodule = {
attach: function (context, settings) {
$('#mymodule_id', context).change(function () {
alert('Handler for .change() called.');
});
}
};
}(jQuery));
Drupal.behaviors.mymodule
Est-il l'espace de noms?document.ready()
?En bref, l'avantage des comportements par rapport à document.ready()
est qu'ils sont automatiquement réappliqués à tout contenu chargé via AJAX. mymodule
est votre espace de noms, qui doit être unique. context
est la partie de la page à laquelle cela s'applique, par exemple une partie d'un formulaire qui a été mis à jour avec AJAX. Vous pouvez associer plusieurs comportements, mais je pense que vous devez utiliser un nom unique (mymodule) pour chacun d'entre eux.
Jetez un œil aux ressources suivantes pour plus d'informations:
En termes simples, Drupal.behaviors
est une meilleure façon de mettre en œuvre jQuery.ready
Contrairement à jQuery.ready
qui ne s'exécute qu'une fois lorsque le DOM est prêt, Drupal.behaviors
peut être exécuté plusieurs fois pendant l'exécution de la page.
Par exemple, dans les vues à défilement infini, plus d'éléments seront chargés lorsque l'utilisateur clique sur le bouton charger plus, par conséquent, DOM changera après le chargement initial.
Et si nous voulons ajouter des classes aux éléments nouvellement ajoutés? Ici Drupal Les comportements sont utiles.
Les comportements seront exécutés sur chaque requête, y compris les requêtes AJAX.
Drupal appellera les comportements attachés lorsque le DOM est chargé et également lorsqu'il est modifié par Ajax, en passant deux arguments
contexte et paramètres
La première fois que Drupal.attachBehaviors () est appelé, la variable context contient l'objet document représentant le DOM, mais pour le reste des appels, le contexte contiendra la partie HTML affectée.
settings contient des informations transmises à JavaScript via PHP, c'est similaire à y accéder via Drupal.settings.
De plus, les modules peuvent également appeler Drupal.attachBehaviors ().