Раскрываем тайны парсера

Хотя действия парсера больше похожи на волшебство, на самом деле все сводится к строгой, хорошо продуманной автоматизации. Как вы теперь знаете, парсер имеет две основные области применения: парсинг страницы во время загрузки при включении параметра djConfig="parseOnLoad:true" и обеспечение возможности парсинга виджетов вручную. Данный раздел во всех подробностях описывает, что происходит в этих двух случаях.

Для выполнения парсинга во время загрузки страницы необходимо соблюсти следующие три требования:
• Включить параметр parseOnLoad:true, как пару ключ/значение в ассоциативный массив djConfig, который будет обнаружен парсером после его загрузки и использован для автоматического запуска парсинга.
• Подключить парсер посредством инструкции dojo.require("dojo.parser"), что обеспечит загрузку парсера и автоматический вызов функции dojo.parser.parse() по окончании загрузки страницы. Так как в этом случае функция вызывается без аргумента, полем деятельности парсера является все тело страницы.
• Добавить в разметку (там, где это необходимо) атрибуты dojoType с определениями виджетов, которые должны быть проанализированы парсером.

При выполнении парсинга вручную для виджетов, которые уже определены в разметке, необходимо выполнить похожие требования:
• Подключить парсер посредством инструкции dojo.require("dojo.parser").


Поскольку при использовании описываемого подхода параметр parseOnLoad не имеет значение true, автоматический вызов функции dojo.parser.parse() не происходит.
• Добавить в разметку атрибуты dojoType с определениями виджетов там, где это необходимо, – возможно, даже динамически, уже после загрузки страницы.
• Вручную вызвать функцию dojo.parser.parse(), при необходимости передав ей в качестве аргумента определенный узел DOM, который станет начальной точкой для выполнения операции парсинга.

Но как фактически протекает процесс парсинга? Вы уже понимаете, что отчасти суть парсинга заключается в поиске атрибутов dojoType и в создании виджетов из них? Напомню еще раз, что весь процесс – это простая автоматизация – при условии, что вы правильно понимаете ее. Ниже описывается, как именно происходит парсинг:
• Вызывается функция dojo.query("[dojoType]"), которая выбирает узлы, требующие парсинга.
• Из каждого узла извлекается информация о классе (подразумеваются классы, создаваемые функцией dojo.declare), выполняется обход всех атрибутов и производится приведение типов. Напомню еще раз, что в атрибутах может определяться информация для функции constructor класса.
• Внутри узлов отыскиваются и намечаются для обработки все теги SCRIPT с типом dojo/method или dojo/connect.


(Подробнее об этом рассказывается в следующем разделе «Определение методов в разметке».)
• Создается экземпляр класса с помощью функции constructor, если не определен метод markupFactory, который используется в против ном случае. markupFactory – это специальный метод, позволяющий определять собственные функцииконструкторы для виджетов, которые требуют иного способа инициализации при использовании в разметке, чем при программном способе создания. Все диджиты наследуют базовый класс _Widget, содержащий ряд стандартных методов управления жизненным циклом. Один из таких методов вставляет domNode диджита в страницу, что обеспечивает его видимость.
• Если в определении виджета присутствует атрибут jsId, то экземпляр класса отображается в глобальное пространство имен JavaScript. (Обычно такая возможность используется применительно к хранилищам данных и к виджетам, когда есть веские основания, чтобы сделать их глобальными переменными.)
• Выполняется обработка всех тегов SCRIPT с типом dojo/connect или dojo/method (подробнее об этом рассказывается далее в этой же главе), и для каждого виджета вызывается метод управления жизненным циклом startup. Метод startup – это еще один стандартный метод управления жизненным циклом, унаследованный от класса _Widget (описывается в следующей главе), позволяющий манипулировать любыми виджетами, содержащимися в создаваемом виджете.

Надеюсь, эти сведения не заставили вас пережить те же чувства, которые появились, когда вы узнали, что Дед Мороз ненастоящий, но когда-то же вы должны были это узнать.


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

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

Статьи из раздела Dojo на эту тему:
WAI-ARIA
Библиотека Dijit для дизайнеров
Диджиты приложения
Диджиты размещения
Диджиты форм

Вернуться в раздел: Dojo / Обзор Dijit