Модуль Behavior

В состав библиотеки Core входит легковесное расширение, построенное поверх функции query, которое обеспечивает возможность отделе ния событий и манипулирования элементами в дереве DOM от разметки HTML с помощью модуля behavior. Возможно, на первый взгляд это не совсем очевидно, но возможность определять поведение (behavior) узлов независимо от разметки может обеспечить приложению высокую гибкость. Например, это позволяет упростить решение таких задач, как связывание обработчиков щелчка мышью со всеми якорными элементами без необходимости знать, где они находятся и сколько якорных элементов имеется. Используя селекторы CSS, можно выделить узлы и присоединить к ним заданное поведение, – так что возможности становятся поистине неограниченными.

В настоящее время прикладной интерфейс модуля содержит две функции – метод add позволяет составлять коллекции из свойств поведения и метод apply запускает поведение:
dojo.behavior.add(/*Object*/ behaviorObject)
dojo.behavior.apply()

Метод add используется, чтобы связать новое свойство поведения с совокупностью узлов DOM, но это свойство не будет реализовано, пока не будет вызван метод apply. Одной из причин такой двухступенчатой организации процесса является то, что выполнение множественных вызовов метода add до выполнения заключительного вызова метода apply сводится к соответствующему числу асинхронных взаимодействий.

Объект, который передается методам add и apply, обладает очень высокой гибкостью и может принимать самые разные формы.


В двух словах: объект поведения содержит пары ключ/значение, которые отображают селекторы CSS на объекты, поставляющие обработчики событий DOM. Обработчики событий DOM также представляют собой пары ключ/значение.

Пример 5.1. Пример dojo.behavior в действии


Fun with Behavior!
href="http://o.aolcdn.com/dojo/1.1/dojo/resources/dojo.css" />
type="text/javascript"
src="http://o.aolcdn.com/dojo/1.1/dojo/dojo.xd.js"
djConfig="isDebug:true"
>

производится подписка... */
dojo.subscribe("/dtdg/behavior/example/click", function(evt) {
console.log(evt.target.innerHTML, "was clicked");
});
});


(body)
Grocery List:
  • Bananas

  • Milk

  • Eggs

  • Orange Juice

  • Frozen Pizzas



(/body)


Как демонстрирует этот пример, любое поведение, которое вы определяете до того, как страница загрузится полностью, вступает в силу автоматически. Однако, когда поведение определяется после загрузки страницы, сначала нужно добавить поведение с помощью метода add, а затем применить его с помощью метода apply. В следующем дополнительном фрагменте к списку элементов добавляется другой обработчик события onclick:
dojo.behavior.add({
"#list > li" : {
onclick : "/dtdg/behavior/example/another/click"
}
});
dojo.behavior.apply();
dojo.subscribe("/dtdg/behavior/example/another/click", function(evt) {
console.log("an additional event handler...");
});

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


Вы просто пользуетесь преимуществом, которое обеспечивается за счет создания соединения с помощью функции apply модуля behavior: любое поведение, которое вы определяете,
добавляется поверх существующего. Другими словами, новое поведение не затирает существовавшее поведение, благодаря чему вы получаете возможность добавлять новые уровни поведения, обработка которых будет выполняться без вашего вмешательства.

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела Dojo на эту тему:
NodeList
Анимация
Аргументы в стиле «функции в виде строк»
Длинный и нестабильный способ
Методы, напоминающие методы массивов

Вернуться в раздел: Dojo / Манипулирование узлами