Drupal поведения - PullRequest
       1

Drupal поведения

56 голосов
/ 15 октября 2010
  • Что такое поведение Drupal вообще?
  • Какой тип сервисного уровня он предлагает разработчикам модулей?
  • Какой тип отношения он сопоставляет с jQuery.ready?

Ответы [ 6 ]

80 голосов
/ 15 октября 2010

Длинная версия : Drupal.behaviors - это не просто замена jQuery.ready, так как последний запускается только один раз (когда DOM готов к манипуляции): поведение может запускаться несколько раз во время выполнения страницы и может запускаться всякий раз, когда новые элементы DOM вставляются в документ.

Кроме того, модули могут переопределять или расширять существующее поведение (например, если один модуль имеет поведение добавления эффекта отскока для всех ссылок, второй модуль может заменить поведение другим эффектом отказов).

Короткая версия : она более модульная, хотя документация может быть улучшена.


Кроме того, начиная с Drupal 7, настройки, определенные с помощью drupal_add_js (PHP) или Drupal.settings.modulename (Javascript), напрямую передаются в качестве второго параметра (первый из которых является контекст) к поведению.

Например:

Drupal.behaviors.changeLinks = function(context, settings){
    if (!settings) settings = Drupal.settings.changeLinks;
    $("a", context).hover(function() {
        $(this).css('color', settings.color);
    });
};

И если один из ваших сценариев (или другой) создает новые узлы, он все равно может применить поведение к новым узлам, не зная, какие другие модули установлены:

var newNodes = $('<a href="#">Hello</a> <a href="#">World</a>').appendTo('#someDiv');

Drupal.attachBehaviors(newNodes);
7 голосов
/ 26 сентября 2013

Дублированная функциональность

Обратите внимание, что архитектура Drupal.behaviors дублирует функциональность уже в jQuery.

Кроме того, на момент написания статьи не было никаких документов или тематических исследований для Drupal.behaviors за пределами самого Drupal ;и документация в Drupal (как указано выше) может значительно выиграть от улучшений.На момент написания этой статьи, по-видимому, первичная подробная документация предоставляется только за ограниченный доступ.

Это означает, что вы можете заметить снижение производительности, аномалии и неожиданные результаты , не соответствующие стандарту jQuery которые свойственны экосистеме Drupal.behaviors.

Собственная функциональность jQuery

В отличие от Drupal.behaviors, встроенная функциональность стандартного API jQuery подробно документировано , включая встроенные демонстрации и примеры .Более того, существует множество примеров в реальном времени, свободно доступных на таких сайтах, как jsfiddle.

Ссылки в разделе «см. Также» перечисляют вызовы API jQuery, относящиеся к обработке новых элементов DOM, вставленных в документ.

См. Также

5 голосов
/ 28 февраля 2016

Наряду с ответами, упомянутыми выше, одним из ключевых моментов является то, что вы можете передавать данные из php в javascript следующим образом

Передача значений из PHP в Javascript с помощью "Drupal.settings"

Вы можете легко сделать переменные из PHP доступными для Javascript во внешнем интерфейсе с помощью Drupal.settings, используя drupal_add_js () function

<?php
  drupal_add_js(array('myModule' => array('key' => 'value')), 'setting');
?>

или

<?php
$element['#attached']['js'][] = array(
  'type' => 'setting',
  'data' => array('myModule' => array('key' => 'value')),
);
?>

Это будетбыть доступным в Javascript как:

  if (Drupal.settings.myModule.key === 'value') {
    alert('Got it!');
  }
3 голосов
/ 18 июля 2015

Искал похожий ответ и прибыл сюда, все еще без подсказок.Наконец, нашел немного больше объяснений (и примеров) из статьи здесь: https://benmarshall.me/drupal-behaviors/

Я не являюсь первоначальным автором, поэтому я могу цитировать только некоторые тексты:

Что такоеПоведение Drupal?

Короче говоря, Drupal.behaviors - это более модульный и лучший способ реализовать jQuery.ready.В отличие от jQuery.ready, который запускается только один раз, когда DOM готов к манипулированию, Drupal.behaviors может запускаться несколько раз во время выполнения страницы.Более того, их можно запускать всякий раз, когда в документ вставляются новые элементы DOM (т. Е. Контент, управляемый AJAX).

Drupal.behaviors также может переопределять или даже расширять существующее поведение.Так, например, если поведение модуля добавляет эффект отказов ко всем ссылкам, другой модуль может заменить это поведение другим эффектом отказов.

Еще один дополнительный бонус Drupal.behaviors (начиная с Drupal 7) - этовозможность использовать drupal_add_js (PHP) или Drupal.settings.modulename (JS) и передавать параметры в качестве второго параметра (первый - контекст) поведению.

1 голос
/ 28 апреля 2018

Drupal имеет систему «поведений», обеспечивающую модульный и более удобный способ добавления функций JavaScript для размещения элементов на странице. Поведение Drupal позволяет вам переопределить или расширить существующее поведение. Эти поведения Drupal являются программами, запускаемыми событиями, которые прикрепляются к элементам страницы, которые необходимо изменить. В то время как поведения могут быть присоединены к определенному содержимому, несколько поведений также прикреплены и могут быть многократно вспыхнуты для быстрого ремейка.

JavaScript, подключив логику к Drupal.behaviors. Вот пример, взятый с этой страницы:

Drupal.behaviors.exampleModule = {
  attach: function (context, settings) {
    $('.example', context).click(function () {
      $(this).next('ul').toggle('show');
    });
  }
}

;

1 голос
/ 22 марта 2018

Поведение Drupal используется, если ваш JavaScript должен быть выполнен при загрузке страницы и после запроса AJAX (некоторые новые элементы добавлены в ваш документ / html).

Drupal.behaviors.yourmodulename = {
  attach: function (context, settings) {
     // Code to be run on page load, and
    // on ajax load added here
  }
};

yourmodulename: это ваше пространство имен, оно должно быть уникальным. Например, обычно это имя вашего модуля, но оно не обязательно.

context: Это действительно очень круто, при загрузке страницы контекст будет содержать весь документ, а после AJAX-запроса будут все вновь загруженные элементы. Таким образом, вы можете обрабатывать контент, загруженный через AJAX, иначе, чем другие.

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

...