Лучшее понимание поведения Drupal

51

Сегодня я прочитал о поведении 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, которые будут где-то вызываться?
взломщик
источник
Этот пост в блоге от Lullabot проделал большую работу по объяснению концепций поведения JS: lullabot.com/articles/…
Стив Перш,

Ответы:

56

Короче говоря, преимущество Поведения перед тем document.ready(), что они автоматически повторно применяются к любому контенту, загруженному через AJAX. mymoduleваше пространство имен, которое должно быть уникальным. contextэто часть страницы, для которой это применимо, например, часть формы, которая была обновлена ​​с помощью AJAX. Вы можете прикрепить несколько вариантов поведения, но я думаю, что вам нужно использовать уникальное имя (mymodule) для каждого из них.

Посмотрите следующие ресурсы для получения дополнительной информации:

Berdir
источник
2

Проще говоря, Drupal.behaviorsэто лучший способ реализоватьjQuery.ready

В отличие от того, jQuery.readyкоторый запускается только один раз, когда DOM готов, Drupal.behaviorsможет выполняться несколько раз во время выполнения страницы.

Например, в представлениях бесконечной прокрутки больше элементов будет загружено, когда пользователь нажимает кнопку «загрузить больше», следовательно, DOM изменится после начальной загрузки.

Что если мы хотим добавить классы к вновь добавленным элементам? Здесь Drupal Behaviors пригодятся.

Поведение будет выполняться при каждом запросе, включая запросы AJAX.

Drupal будет вызывать присоединенное поведение при загрузке DOM, а также при его изменении Ajax, передавая два аргумента

контекст и настройки

При первом вызове Drupal.attachBehaviors () переменная контекста содержит объект документа, представляющий DOM, но для остальных вызовов контекст будет содержать уязвимый фрагмент HTML.

Настройки содержат информацию, передаваемую в JavaScript через PHP, это похоже на доступ к ней через Drupal.settings.

Кроме того, модули могут также вызывать Drupal.attachBehaviors ().

Вивек Агарвал
источник