Extra Block Types (EBT) - Nueva experiencia con Layout Builder❗

Extra Block Types (EBT): tipos de bloques con estilo y personalizables: Presentaciones de diapositivas, Pestañas, Tarjetas, Acordeones y muchos más. Configuraciones integradas para fondo, DOM Box y plugins de JavaScript. Experimenta hoy el futuro de la construcción de diseños.

Módulos de demostración EBT Descargar módulos EBT

❗Extra Paragraph Types (EPT) - Nueva experiencia con Paragraphs

Extra Paragraph Types (EPT): conjunto de módulos basado en párrafos de forma análoga.

Módulos de demostración EPT Descargar módulos EPT

Scroll

Reemplace jQuery.once() con once() de JavaScript en Drupal 10.

10/05/2025, by Ivan

¡Drupal 10 ya está aquí! Y Drupal 10 ya no incluye la biblioteca drupal/jquery.once:

https://www.drupal.org/node/3158256

jQuery once fue eliminado del núcleo de Drupal, pero aún está presente en muchos módulos contribuidos:

biblioteca jquery.once
Biblioteca jQuery.once en módulos contribuidos

Los mantenedores de módulos recibieron tickets de actualización con parches bajo el nombre "Automated Drupal 10 compatibility fixes":

https://www.drupal.org/project/media_library_edit/issues/3288511

Pero estas actualizaciones no contienen correcciones para jquery.once. Por eso muchos mantenedores pensaron que sus módulos ya estaban listos para Drupal 10 y no los probaron.

Así que si tienes el error "Uncaught TypeError: $(...).once is not a function", no te preocupes, es fácil de solucionar.

1. Necesitas cambiar la biblioteca core/jquery.once por core/once en el archivo *.libraries.yml (ver captura de pantalla anterior)

dependencies:
  - core/jquery
  - core/once

2. Actualiza el código JavaScript y reemplaza $.once() con la función once() de JavaScript. Por ejemplo, código con jQuery.once():

  Drupal.behaviors.fileBrowserClickProxy = {
    attach: function (context, settings) {
      $('.grid-item', context).once('bind-click-event').click(function () {
        // código javascript/jQuery aquí.
      });
    }
  };


Código con la función once() de JavaScript (código funcional en Drupal 10):

  Drupal.behaviors.fileBrowserClickProxy = {
    attach: function (context, settings) {
      $(once('bind-click-event', '.grid-item', context)).each(function () {
        $(this).on('click', function() {
          // código javascript/jQuery aquí.
        });
      });
    }
  };

Drupal 10 aún utiliza jQuery, por lo tanto podemos envolver la función once() en el signo de dólar de jQuery, lo que hace que devuelva un objeto jQuery y nos permite usar el método .each() de jQuery.

También puedes optar por no usar jQuery en absoluto en tu JavaScript personalizado:

https://youmightnotneedjquery.com/

  Drupal.behaviors.fileBrowserClickProxy = {
    attach: function (context, settings) {
      once('bind-click-event', '.grid-item', context).forEach(el => {
        el.addEventListener('click', () => {
          // Solo JavaScript puro aquí.
        });
        el.classList.add(className);
      });
    }
  };

Pero en ese caso, necesitarás reescribir todo el código jQuery dentro de la función de devolución de llamada del evento 'click'.

 

Tags