Создание расширений для NodeList

Хотя имеющийся набор встроенных методов NodeList очень функционален, но пройдет совсем немного времени, и вы обнаружите, что вам очень не хватает какогонибудь особенного метода. К счастью, чтобы расширить возможности NodeList, нужно приложить совсем немного усилий. Рассмотрим следующий случай использования функции query для получения значения свойства innerHTML каждого элемента в списке NodeList:
dojo.query("p").map(function(x) {return x.innerHTML;});

По сравнению со случаем, когда вам пришлось бы разрабатывать собственное решение этой задачи, вы получили достаточно краткое решение, но это решение можно упростить еще больше, использовав более краткий синтаксис «функций в виде строк», – внеся следующее усовершенствование:
dojo.query("p").map("return item.innerHTML;"); //Используется специальный
//идентификатор item

Определенно, это – усовершенствование, но как вам кажется – может ли ваш программный код выглядеть еще более удобочитаемым и еще более кратким? Взгляните на следующее расширение к NodeList, которое воплощает отображение в более удобочитаемую и элегантную функцию, имя которой совершенно отчетливо сообщает о выполняемом ею действии:
//Расширить прототип объекта NodeList новой функцией
dojo.extend(dojo.NodeList, {
innerHTML : function() {
return this.map("return item.innerHTML");
}
});
//Вызов новой функции
dojo.query("p").innerHTML();

Что действительно очень удобно при расширении возможностей NodeList, так это отсутствие необходимости слишком далеко забегать вперед при планировании – вы можете одновременно существенно упрощать структуру приложения и делать его менее сложным в сопровождении.

При создании подобных расширений рекомендуется использовать модульный подход, суть которого заключается в создании подмодуля с именем ext!dojo с файлом ресурса NodeList.js внутри, чтобы инструкция dojo.require была кристально ясной для тех, кто будет читать ваш программный код.


В конечном счете, от такого решения выиграют все. В окончательном варианте порядок использования вашего расширения может выглядеть примерно так, как показано ниже:
/* ... */
dojo.require("dtdg.ext-dojo.NodeList");
/* ...*/
dojo.query("p").innerHTML();

Очевидно, если соблюдать точность во всех мелочах, вы могли бы на звать свой файл ресурса NodeList!innerHTML.js; делайте так, как сочтете удобным, – при условии, что от этого не возникнет противоречий.

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

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

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