Mejor comprensión de los comportamientos de Drupal.

51

Leí sobre los comportamientos de Drupal hoy e intenté escribir el siguiente código.

(function ($) {

  Drupal.behaviors.mymodule = {
    attach: function (context, settings) {
      $('#mymodule_id', context).change(function () {
        alert('Handler for .change() called.');
      });
    }
  };

}(jQuery));
  • Es Drupal.behaviors.mymoduleel espacio de nombres?
  • ¿Cuáles son los parámetros de contexto y configuración pasados ​​al comportamiento de Drupal?
  • ¿Es esto el equivalente de document.ready()?
  • ¿Puedo adjuntar cualquier número de funciones?
  • ¿Puedo definir funciones de JavaScript que se llamarán en alguna parte?
Hacker
fuente
Esta publicación de blog de Lullabot hace un gran trabajo al explicar los conceptos sobre los comportamientos de JS: lullabot.com/articles/…
Steve Persch

Respuestas:

56

En resumen, la ventaja de Behaviors document.ready()es que se vuelven a aplicar automáticamente a cualquier contenido cargado a través de AJAX. mymodulees su espacio de nombres, que debe ser único. contextes la parte de la página a la que se aplica esto, por ejemplo, una parte de un formulario que se ha actualizado con AJAX. Puede adjuntar múltiples comportamientos, pero creo que necesita usar un nombre único (mymodule) para cada uno de ellos.

Eche un vistazo a los siguientes recursos para obtener más información:

Berdir
fuente
2

En palabras sencillas, Drupal.behaviorses una mejor manera de implementarjQuery.ready

A diferencia de lo jQuery.readyque solo se ejecuta una vez cuando el DOM está listo, Drupal.behaviorsse puede ejecutar varias veces durante la ejecución de la página.

Por ejemplo, en las vistas de desplazamiento infinito, se cargarán más elementos cuando el usuario haga clic en cargar más botón, por lo tanto, DOM cambiará después de la carga inicial.

¿Qué pasa si queremos agregar clases a los elementos recién agregados? Aquí los comportamientos de Drupal son útiles.

Los comportamientos se ejecutarán en cada solicitud, incluidas las solicitudes AJAX.

Drupal llamará a los comportamientos adjuntos cuando se carga el DOM y también cuando Ajax lo cambia, pasando dos argumentos

contexto y configuración

La primera vez que se llama a Drupal.attachBehaviors (), la variable de contexto contiene el objeto de documento que representa el DOM, pero para el resto de las llamadas, el contexto contendrá el fragmento de HTML afectado.

la configuración contiene información transmitida a JavaScript a través de PHP, es similar a acceder a ella a través de Drupal.settings.

Además, los módulos también pueden llamar a Drupal.attachBehaviors ().

vivek agarwal
fuente