Сегодня я прочитал о поведении Drupal и попытался написать следующий код.
(function ($) {
Drupal.behaviors.mymodule = {
attach: function (context, settings) {
$('#mymodule_id', context).change(function () {
alert('Handler for .change() called.');
});
}
};
}(jQuery));
- Является ли
Drupal.behaviors.mymodule
пространство имен? - Какие параметры контекста и настроек передаются поведению Drupal?
- Это эквивалент
document.ready()
? - Могу ли я прикрепить любое количество функций?
- Могу ли я определить функции JavaScript, которые будут где-то вызываться?
7
javascript
взломщик
источник
источник
Ответы:
Короче говоря, преимущество Поведения перед тем
document.ready()
, что они автоматически повторно применяются к любому контенту, загруженному через AJAX.mymodule
ваше пространство имен, которое должно быть уникальным.context
это часть страницы, для которой это применимо, например, часть формы, которая была обновлена с помощью AJAX. Вы можете прикрепить несколько вариантов поведения, но я думаю, что вам нужно использовать уникальное имя (mymodule) для каждого из них.Посмотрите следующие ресурсы для получения дополнительной информации:
источник
Проще говоря,
Drupal.behaviors
это лучший способ реализоватьjQuery.ready
В отличие от того,
jQuery.ready
который запускается только один раз, когда DOM готов,Drupal.behaviors
может выполняться несколько раз во время выполнения страницы.Например, в представлениях бесконечной прокрутки больше элементов будет загружено, когда пользователь нажимает кнопку «загрузить больше», следовательно, DOM изменится после начальной загрузки.
Что если мы хотим добавить классы к вновь добавленным элементам? Здесь Drupal Behaviors пригодятся.
Drupal будет вызывать присоединенное поведение при загрузке DOM, а также при его изменении Ajax, передавая два аргумента
контекст и настройки
При первом вызове Drupal.attachBehaviors () переменная контекста содержит объект документа, представляющий DOM, но для остальных вызовов контекст будет содержать уязвимый фрагмент HTML.
Настройки содержат информацию, передаваемую в JavaScript через PHP, это похоже на доступ к ней через Drupal.settings.
Кроме того, модули могут также вызывать Drupal.attachBehaviors ().
источник