В 9-ке стоял в теме такой JS код. При переносе на 10-ку он не работает.
В файле mytheme.libraries.yml
Заменил зависимости:
Было:
js:
js/toggle-search-block.js: {}
dependencies:
- core/jquery
- core/jquery.once
- core/drupal
Стало:
js:
js/toggle-search-block.js: {}
dependencies:
- core/drupal
- core/once
А вот что поменять в самом js коде, чтобы он заработал? Сейчас так:
'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);
Комментарии
Что именно не работает-то?
В js придётся переписать почти каждую строку. Вот хороший сайт с подсказками, как это делать https://youmightnotneedjquery.com/
Дак jQuery же не выпилили из Drupal 10. У меня почти весь код работает, только конструкции с once пришлось переписать по другому
Но чел же зачем-то сам выпилил зависимость, значит у него цель переписать без jQuery. Логично?
Логично. А может он неверно прочитал changelog и подумал, что jquery выпилили из Drupal 10
А зачем нужна эта зависимость?
- core/once
Чтобы использовать функцию once. Она теперь идёт отдельной библиотекой, а jQuery once выпилили
А зачем использовать функцию once?
Для того, чтобы действие происходило только один раз даже если на странице что-то ajax-ом подгружается?
Да. Js behaviors могут дергаться до 15 раз за одну загрузку страницы. И какое-то действие может выполнятьсч все 15 раз, вместо одного раза.