No es un especialista de Drupal, pero este blog entry sugiere que, a partir de Drupal 6, no es necesario que incluya la función $(document).ready()
en nuestro código jQuery.
En su lugar, puede poner todo el código dentro de una función que asigne como una propiedad de Drupal.behaviors
.
En el misc/ directory
de la Drupal instalar, no sólo tenemos el archivo jquery.js pero también tenemos drupal.js (y archivos varios otros js, que controlan funciones específicas a determinadas páginas o funciones de administración de carga, por ejemplo. js), que rige el uso general de jQuery en Drupal.
Declara el objeto Drupal JavaScript con el fin de contener propiedades que necesitan ser accedidas y utilizadas por otros archivos js. Por ejemplo, la propiedad Drupal.settings se usa para pasar una matriz de configuraciones de módulos al código js para ese módulo. Esto se hace mediante una llamada telefónica drupal_add_js() en el código php y asegurándose de que el segundo parámetro se pasa como "ajuste", por ejemplo:
drupal_add_js(array('mymodule' => $array_of_settings), 'setting');
En el archivo js, a continuación, se puede acceder estas configuraciones en Drupal.settings.mymodule. De este modo, ha extendido el objeto Drupal.settings con la propiedad mymodule, que es en sí misma un objeto que contiene todas sus configuraciones.
Otra propiedad del objeto Drupal es el objeto de comportamientos, es decir, Drupal.behaviors
, y cuando queremos que nuestro módulo agregue nuevos comportamientos jQuery, simplemente ampliamos este objeto. Todo el código de jQuery para su módulo podría estar estructurado de esta manera:
Drupal.behaviors.myModuleBehavior = function (context)
{
//do some fancy stuff
};
Pero, se preguntará, lo único que hace es declarar una función - ¿cómo se llama incluso conseguir? Bueno, que está todo cuidado en drupal.js. Tiene una función $(document).ready
que llama a la función Drupal.attachBehaviors
, que a su vez recorre el objeto Drupal.behaviors
llamando a cada una de sus propiedades, todas estas funciones son declaradas por varios módulos como arriba, y pasando el documento como el contexto. El motivo para hacerlo de esta manera es que si su código jQuery realiza llamadas AJAX que dan como resultado la adición de nuevos elementos DOM a la página, es posible que desee adjuntar sus comportamientos (p. Ej., Ocultar todos los elementos h3 o lo que sea). ese nuevo contenido también. Pero como no existía cuando se cargó el DOM y se ejecutó Drupal.attachBehaviors
, no tiene ningún comportamiento asociado.Sin embargo, con la configuración anterior, todo lo que necesita hacer es llamar al Drupal.behaviors.myModuleBehavior(newcontext)
, donde newcontext
sería el nuevo contenido entregado por AJAX, asegurando así que los comportamientos no se vuelvan a adjuntar al documento completo. Consulte aquí para obtener el ejemplo completo de cómo usar este código
En realidad, debe llamar a Drupal.attachBehaviors (newcontext) para permitir que todos los comportamientos registrados procesen el elemento newcontext (y sus elementos secundarios). –