Шаблоны
14.9. Отладка: советы по отладке шаблона
Если шаблоны созданы и используются корректно, все работает. В работе шаблонов практически нет отклонений, способных вызвать сбой. Большинство ошибок - следствие синтаксических ошибок кода.
Работая на платформе Microsoft Windows, удостоверьтесь, что Mozilla полностью завершила работу и выгружена из памяти после закрытия последнего окна. Если используется неверно сформированный шаблон, процесс может застрять в памяти и повлиять на последующие пробы. Если такое случается - самый общий симптом состоит в том, что кажется, будто изменения, вносимые в код XUL или JavaScript, не дают ожидаемого эффекта. Безопаснее всего перестартовывать платформу каждый раз заново. Если вы не отключили заставку Mozilla, она - явный -знак, что платформа стартовала заново.
Вторая ловушка связана с рекурсивными запросами. Работайте только с виджетами <menu> и <tree>, остальные ведут себя непредсказуемо и могут вызвать падение платформы.
Комбинация RDF-документа и XUL шаблона требует впятеро большей заботы, чем создание тега <tree>, описанное в лекции 13, "Списки и деревья". Если хоть мельчайшая деталь некорректна, шаблон не даст вовсе никакого результата, и не будет и намека, почему так произошло. Очень важно все делать правильно с самого начала.
14.9. Пишем шаблон
Создавая шаблон, всегда начинайте с тестовых данных во внешнем RDF файле. Mozilla имеет все необходимые инструменты для обработки RDF- источников данных, хранимых во внешних файлах. Их легко читать и человеку. Используйте технику, описанную в разделе "Отладка" "RDF" , "RDF". Это даст вам уверенность, что данные загружаются именно так, как вы ожидаете. Загрузите файл прямо в браузер, чтобы увидеть синтаксические ошибки. Загрузите файл, переименовав его в .xml, чтобы увидеть ошибки, связанные с отступами. Или используйте инструменты проверки RDF, рекомендуемые W3C.
Создав корректные данные, удостоверьтесь, что результат можно видеть в окне XUL.
Если шаблон не рекурсивен, создайте шаблон с базовым тегом <vbox>. Выведите что-нибудь в тег <description> или <label> без лишних "красивостей" в правилах. Как только что-то осмысленное появится на экране, вы получаете по крайней мере корень запроса и часть его правильной структуры. Даже если ваша цель - сложный тег "дерево" со многими уровнями вложения, начинайте сначала с <vbox>.
Если ваш источник данных - внутренний, прочитайте советы в "Объекты XPCOM" , "Объекты XPCOM", и извлеките максимум информации из данных на тестовую страницу. Некоторыми источниками данных можно управлять прямо из шаблона, остальные требуют скриптов. Нужно хорошо изучить порождаемый контент, иначе запрос шаблона не сработает.
Наконец, стройте запрос. Система запросов гибка, и может обработать некоторые вариации контента внутри тега <template>, но вносить их все же не рекомендуется. Чтобы избежать лишних хлопот, следуйте как можно ближе к порядку тегов, приведенному в данной лекции. Хотя от него и можно отступать, это может привести к некорректному преобразованию шаблона и его переменных во внутреннюю форму. Тут перемена мест на результат влияет, и еще как.
Если шаблон рекурсивен, вы не можете тестировать рекурсию без тегов <menu> или <tree>, но лишь первый уровень рекурсии. Чтобы тестировать дальнейшие уровни, используйте <tree>, а не <menu>. Невозможно построить рекурсивно порожденное множество меню единственным правилом <rule> - требуется, по крайней мере, два.
Одно правило необходимо для элементов <menu>, другое - для элементов <menuitem>. Так что для тестирования рекурсивных запросов дерево - самый подходящий и простой механизм.
Только после того, как тестовый запрос даст ожидаемый результат, начинайте работу с реальным виджетом. В случае дерева начинайте с кода, приведенного в данной лекции, и обязательно следите за тем, чтобы дерево имело первичную колонку. Необходимые детали можно добавить позже. Внимательно просмотрите флаги и опции, которые можно добавить к базовому тегу, некоторые из них жизненно важны. Автоматически добавьте flags="dont-build-content" и flex="1", если только вы не знаете точно, что они не нужны.
Когда ваш шаблон заработает правильно, можно добавить скрипты его динамического поведения. Раздел 14.6.1, "Советы по созданию динамических шаблонов" содержит действительно важные советы. За пределами, описанными в этом разделе, поддерживается не слишком многое.
Наконец, обратите внимание на раздел "Источники данных" "Объекты XPCOM" , "Объекты XPCOM". Если ваш источник данных RDF - внутренний, его нужно аккуратно наполнять данными перед использованием. Большинство внутренних источников не имеют опубликованного внутреннего представления RDF фактов. В качестве последнего рубежа посмотрите на то, как они используются в уже работающих приложениях Mozilla.
14.10. Итоги
Система шаблонов Mozilla обрабатывает RDF и предоставляет средства оформления полученных результатов запроса. Эти результаты могут изменяться динамически, чтобы отслеживать изменения лежащих в основе данных. Система шаблонов - вершина языка XUL. Она интегрирована с системой верстки приложения. Она предназначена для конструирования динамических GUI-интерфейсов или просто для предоставления изменяющихся данных в фиксированном окне приложения. Шаблоны не статичны, они легко могут изменяться, если изменяются исходные условия.
Система сложна для изучения. Она использует новаторские концепции и массу подводных камней, и выдает слишком мало отладочной информации в процессе создания шаблона. Разнородные источники данных требуют каждый индивидуального подхода и усилий по их изучению, что также не упрощает работу.
Несмотря на проблемы первой версии платформы, шаблоны являются очень мощным инструментом. RDF файл, сохраненный по известному URL где угодно в мире, может быть загружен и обработан с помощью краткого и выразительного множества XUL тегов. Эта простота - залог дальнейшего развития способностей платформы Mozilla в обработке и представлении данных. По-видимому, существующая система шаблонов - лишь первый шаг в этом направлении.
Для порождения и управления новым контентом XUL документа могут быть использованы JavaScript и DOM. RDF и система шаблонов ведут к одной и одной и той же цели - наглядному представлению и управлению данными, хотя и разными путями. Есть и третий путь - XBL, это тема нашей "XBL-связки" .