- Qu'est-ce qu'un comportement Drupal?
- Quel type de couche de service offre-t-elle aux développeurs de modules?
- Quel type de relation il mappe à
jQuery.ready
?
Répondre
Version longue: Drupal.behaviors est non seulement un remplacement pour jQuery.ready puisque celui-ci exécute une seule fois (lorsque DOM est prêt pour la manipulation): les comportements peuvent être déclenchés à plusieurs reprises lors de l'exécution de la page et peuvent être s'exécuter chaque fois que de nouveaux éléments DOM sont insérés dans le document. En outre, les modules peuvent outrepasser ou étendre un comportement existant (par exemple, si un module a un comportement consistant à ajouter un effet de rebond sur toutes les liaisons, un second module pourrait remplacer le comportement par un effet de rebond différent).
Version abrégée: il est plus modulaire, bien que la documentation puisse être améliorée.
En outre, à partir de Drupal 7, les paramètres définis à l'aide drupal_add_js (PHP) ou dans Drupal.settings.modulename (Javascript) sont directement transmis comme deuxième paramètre (le premier étant le contexte) pour le comportement.
Par exemple:
Drupal.behaviors.changeLinks = function(context, settings){
if (!settings) settings = Drupal.settings.changeLinks;
$("a", context).hover(function() {
$(this).css('color', settings.color);
});
};
Et si l'un de votre script (ou un autre) crée de nouveaux nœuds, il pourrait encore avoir les comportements appliqués aux nouveaux noeuds sans avoir à connaître ce que les autres modules sont iinstalled:
var newNodes = $('<a href="#">Hello</a> <a href="#">World</a>').appendTo('#someDiv');
Drupal.attachBehaviors(newNodes);
Juste pour noter que vous devez envelopper toute utilisation de $() dans (function ($) {// code ici}) (jQuery); (Avec les versions actuelles de Drupal 7) Documentation officielle à ce sujet ici: https://www.drupal.org/node/756722#using-jquery –
Quel est le point de passer contexte ici? – AlxVallejo
Le contexte est le fragment du DOM qui a été modifié. Au départ, c'est le document entier. Mais pour tous les appels suivants, ce ne sera que la nouvelle partie ajoutée ou modifiée. Par exemple, si vous utilisez la bibliothèque Lightbox pour ouvrir quelque chose de nouveau dans une Lightbox, alors vous aurez un contexte qui ne correspondra qu'aux éléments nouvellement ajoutés. De cette façon, toute recherche/correspondance jQuery se produira dans un ensemble limité d'éléments HTML limités au lieu du document entier. En outre, cela empêche le retraitement des éléments déjà traités. Il est recommandé d'utiliser $ (". A-thing", contexte) pour l'efficacité, le cas échéant. – asiby
dupliquées Fonctionnalité
Notez que l'architecture Drupal.behaviors duplique la fonctionnalité déjà dans jQuery.
aussi, de cette écriture, il ne semble pas y avoir de documents ou études de cas pour Drupal.behaviors en dehors de Drupal lui-même; et la documentation au sein de Drupal (comme indiqué ci-dessus) pourrait bénéficier considérablement des améliorations. Au moment de la rédaction de ce document, il semble que la documentation détaillée principale est un accès restreint uniquement pour les frais. Cela signifie que vous pouvez remarquer une dégradation des performances, des anomalies et des résultats inattendus non conformes à la norme jQuery qui sont endémiques à l'écosystème Drupal.behaviors.
fonctionnalité native jQuery
Contrairement à Drupal.behaviors, la fonctionnalité intégrée de l'API standard jQuery est largement documenté y compris en ligne démonstrations et des exemples. De plus, de nombreux exemples sont disponibles gratuitement sur des sites tels que jsfiddle.
Les liens de la section voir aussi énumèrent les appels d'API jQuery relatifs à la gestion des nouveaux éléments DOM insérés dans le document.
Voir aussi
"il ne semble y avoir aucune documentation" Désolé mais c'est tout simplement faux. Recherchez simplement "jquery Drupal.behaviors" et vous obtiendrez 85k + de résultats. En voici quelques unes sur ma première page: https://drupal.org/node/756722 http://blog.amazeelabs.com/de/comment/510193 http://drewish.com/2011/05/11/drupal -javascripting/ Il y a certainement place à l'amélioration ici mais en l'état votre réponse est plus FUD qu'utile. –
// il ne semble y avoir aucune documentation ou étude de cas pour Drupal.behaviors *** en dehors de Drupal lui-même *** // (pas d'italique dans l'original) N'hésitez pas à ajouter des clarifications ou corrections légitimes, mais l'affirmation que vous avez faite ici n'est pas exacte. Plus important encore, vous avez omis les mots "en dehors de Drupal lui-même". S'il existe d'autres frameworks ou projets ayant adopté Drupal.behaviors, n'hésitez pas à ajouter des liens ici et à améliorer la qualité de la réponse. À l'heure actuelle, l'ajout ne réfute rien dans la réponse d'origine. – dreftymac
Les comportements sont spécifiques à Drupal et c'est pourquoi il n'y a pas de documentation ou de cas d'utilisation en dehors de Drupal. Les comportements étendent les fonctionnalités de jQuery, ils ne les dupliquent pas. L'envoi de contexte et de paramètres n'est pas quelque chose que jQuery fait. Et ils offrent également une intégration avec le framework AJAX de Drupal. Dire qu'ils dupliquent jQuery démontre très peu de compréhension de l'API JavaScript de Drupal. – Luxian
Vous cherchez une réponse similaire et est arrivé ici, toujours sans indices. Enfin trouvé un peu plus d'explications (et des exemples) d'un article ici: https://benmarshall.me/drupal-behaviors/
Je ne suis pas l'auteur original, donc je ne peux que citer quelques textes:
Quels sont Drupal Behaviors?
En bref, Drupal.behaviors est un moyen plus modulaire et mieux à mettre en œuvre jQuery.ready. Contrairement à jQuery.ready qui ne s'exécute qu'une seule fois lorsque le DOM est prêt pour la manipulation, Drupal.behaviors peut être exécuté plusieurs fois au cours de l'exécution de la page . Mieux encore, ils peuvent être exécutés chaque fois que de nouveaux éléments DOM sont insérés dans le document (c'est-à-dire AJAX ). Drupal.behaviors peut également remplacer ou même étendre un comportement existant. Ainsi, par exemple, si un comportement de module ajoute un effet de rebond sur tous les liens, un autre module pourrait remplacer ce comportement par un effet de rebond différent de .
Un autre avantage supplémentaire de Drupal.behaviors (à partir de Drupal 7), est la possibilité d'utiliser les drupal_add_js (PHP) ou Drupal.settings.modulename (JS) et de transmettre les paramètres en tant que second paramètre (le premier étant le contexte) au comportement.
ainsi que les réponses mentionnées ci-dessus sur des éléments clés est que vous pouvez transmettre des données de php à javascript qui est la suivante
valeurs de PHP à Passing Javascript avec « Drupal.settings »
Vous peut facilement faire des variables de PHP disponible pour Javascript est désactivé sur l'avant avec l'aide Drupal.settings drupal_add_js() fonction
<?php
drupal_add_js(array('myModule' => array('key' => 'value')), 'setting');
?>
ou
<?php
$element['#attached']['js'][] = array(
'type' => 'setting',
'data' => array('myModule' => array('key' => 'value')),
);
?>
Ce sera disponible en Javascript que:
if (Drupal.settings.myModule.key === 'value') {
alert('Got it!');
}
@JoshiConsultancy D'une manière générale, une réponse efficace sur stackoverflow se compose d'une réponse directe ** ** y compris des liens vers des citations et des références. La plupart des gens qui voient cette page ** sont arrivés en cherchant ** pour commencer. – dreftymac