logo

Extra Block Types (EBT) - Nuova esperienza con Layout Builder❗

Extra Block Types (EBT) - tipi di blocchi stilizzati e personalizzabili: Slideshows, Tabs, Cards, Accordion e molti altri. Impostazioni integrate per sfondo, DOM Box, plugin javascript. Vivi oggi il futuro della costruzione dei layout.

Demo moduli EBT Scarica moduli EBT

❗Extra Paragraph Types (EPT) - Nuova esperienza con Paragraphs

Extra Paragraph Types (EPT) - insieme di moduli basati su paragrafi in modo analogo.

Demo moduli EPT Scarica moduli EPT

Scorri

Sostituire jQuery.once() con javascript once() in Drupal 10

13/09/2025, by Ivan

Drupal 10 è arrivato! E Drupal 10 non include più la libreria drupal/jquery.once:

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

jQuery once è stato rimosso dal core di Drupal, ma è ancora presente in molti moduli contrib:

jquery.once library
Libreria jQuery.once nei moduli contrib

I maintainer dei moduli hanno ricevuto ticket di aggiornamento con patch chiamate "Automated Drupal 10 compatibility fixes":

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

Ma questi aggiornamenti non contengono correzioni per jquery.once. Quindi molti maintainer erano convinti che i moduli fossero pronti per Drupal 10 e non li hanno ancora testati.

Quindi, se ricevi l’errore "Uncaught TypeError: $(...).once is not a function", non preoccuparti: è facile da risolvere.

1. Devi sostituire la libreria core/jquery.once con core/once nel file *.libraries.yml (vedi screenshot sopra)

dependencies:
  - core/jquery
  - core/once

2. Aggiorna il codice javascript e sostituisci $.once() con la funzione javascript once(), ad esempio il codice con jQuery.once():

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


Codice con javascript once() (Codice funzionante in Drupal 10):

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

Drupal 10 utilizza ancora jQuery, quindi possiamo racchiudere la funzione once() nel simbolo dollaro di jQuery, in modo che restituisca un oggetto jQuery dalla funzione once() e possiamo usare il metodo .each() di jQuery.

Puoi anche non usare affatto jQuery nel tuo javascript personalizzato:

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 qui.
        });
        el.classList.add(className);
      });
    }
  };

Ma in questo caso dovrai riscrivere tutto il codice jQuery all’interno della funzione di callback 'click'.

 

Etichette