Подтвердить что ты не робот

Поведение Drupal

  • Что такое поведение Drupal?
  • Какой уровень обслуживания он предлагает разработчикам модулей?
  • Какое отношение он сопоставляет с jQuery.ready?
4b9b3361

Ответ 1

Длинная версия: 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);
    });
};

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

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

Drupal.attachBehaviors(newNodes);

Ответ 2

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

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

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

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

Нативная функциональность jQuery

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

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

См. также

Ответ 3

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

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

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

<?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!');
  }

Ответ 4

Ищете аналогичный ответ и приехали сюда, все еще без подсказок. Наконец, было найдено немного больше объяснений (и примеров) из статьи здесь: 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) и параметры передачи в качестве второго параметра (первым из которых является контекст) к поведению.