В Drupal 10 не работает JS код. Зависимость jquery

Главные вкладки

Аватар пользователя Sennheiser Sennheiser 25 декабря 2022 в 10:51
1

В 9-ке стоял в теме такой JS код. При переносе на 10-ку он не работает.

В файле mytheme.libraries.yml

Заменил зависимости:

Было:

toggle-search-block:
  js:
    js/toggle-search-block.js: {}
  dependencies:
    - core/jquery
    - core/jquery.once
    - core/drupal

Стало:

toggle-search-block:
  js:
    js/toggle-search-block.js: {}
  dependencies:
   - core/drupal
   - core/once

А вот что поменять в самом js коде, чтобы он заработал? Сейчас так:

(function ($, Drupal) {
  'use strict';

  Drupal.behaviors.mythemeToggleSearchBlock = {
    attach: function (context, settings) {
      $(context).find('.js-toggle-search')
        .once().on('click', function (event) {
        event.preventDefault();
        $(this).toggleClass('active');
        $(context).find('.region-search').toggleClass('active');
      });
    }
  }
})(jQuery, Drupal);

Комментарии

Аватар пользователя ivnish ivnish 25 декабря 2022 в 14:19

Дак jQuery же не выпилили из Drupal 10. У меня почти весь код работает, только конструкции с once пришлось переписать по другому

Аватар пользователя VasyOK VasyOK 30 декабря 2022 в 4:32

А зачем использовать функцию once?
Для того, чтобы действие происходило только один раз даже если на странице что-то ajax-ом подгружается?

Аватар пользователя ivnish ivnish 30 декабря 2022 в 6:52

Да. Js behaviors могут дергаться до 15 раз за одну загрузку страницы. И какое-то действие может выполнятьсч все 15 раз, вместо одного раза.