mozilla
Your Search Results

    Введение

    Шаблоны XUL используются для автоматического создания контента на основе результатов запроса. Хороший пример - выполнение запроса к базе данных: для каждого набора данных, полученных запросом, создаётся некоторый контент. Синтаксис шаблонов позволяет как создавать новый контент, так и изменять значения атрибутов, используя правила с параметрами. Иногда это называют привязкой данных (databinding). Таким образом, шаблоны XUL используются для эффективной реализации привязки данных.

    Каждый шаблон получает необходимые данные из соответствующего источника. По-умолчанию поддерживается несколько типов источников данных: RDF, XML и базы данных Sqlite. Тем не менее, для поддержки других типов источников данных могут быть написаны соответствующие процессоры. При использовании технологии XUL источник данных определяется атрибутом datasources. Как правило, его значением является URI, указывающий на местонахождение данных. Например, для источника данных XML определяется соответствующий URL. Когда анализатор XUL находит элемент с этим атрибутом, он создаёт конструктор шаблона и связывает его с этим элементом. Предполагается также, что внутри этого элемента находится шаблон. Конструктор шаблона загружает источник данных, выполняет требуемый запрос и на основании полученных результатов генерирует соответсвующий контент. Тип источника данных определяется с помощью шаблона querytype. Тип определяет не только способ использования источника данных, но и синтаксис запросов.

    Сгенерированный шаблоном контент дополняет дерево документа XUL так же, как если бы вы сделали это собственноручно. Например:

    <vbox datasources="http://www.xulplanet.com/ds/sample.rdf" querytype="rdf">
    

    В этом примере источник данных определён файлом 'http://www.xulplanet.com/ds/sample.rdf'; тип источника данных - rdf, это определено атрибутом querytype.

    Для начала давайте посмотрим, как обрабатывается источник данных RDF. Для его загрузки конструктор шаблона использует сервис RDF - тот же самый, который вы можете использовать напрямую. Для определения местонахождения ресурса используется URL. Тем не менее, некоторые источники данных RDF предоставляет платформа Mozilla, и их URL предваряются символами 'rdf:'. Если же это не используется, то источник данных загружается также, как и любой другой файл - по его URL. Если источник данных уже загружен и кеширован, конструктор шаблонов может сразу же начинать работу. В противном случае, ничего не происходит до тех пор, пока данные не загружены, хотя на самом деле это не совсем так. Сервис RDF начинает загрузку данных в фоновом режиме и в это же время начинает работать конструктор шаблонов. Естественно, доколе данные не поступили, ничего не будет отображено и конструктор приостанавливает работу.

    Когда данные начинают поступать, конструктор определяет, достаточно ли информации для их обработки. Если это так, генерируется какой-то контент. В противном случае результата опять-таки нет. Интересно, что в силу природы процесса анализа RDF-данных, конструктор обрабатывает данные и выдаёт результат инкрементно, т.е. порциями - одновременно с поступлением данных (это особенно важно, например, для геоинформационных систем, работающих в режиме реального времени и оперирующих с огромными массивами данных). Конечно, поскольку данные поступают из сети достаточно быстро, вы, скорее всего, не заметите этого процесса, но это не умаляет его важности. Если же данные уже загружены, то конструктор обрабатывает их целиком, за один раз, хотя, как мы увидим позже, даже это не совсем так.

    Используя источники данных XML, атрибут querytype должен иметь значение xml. Атрибут datasources должен содержать URL файла XML, который указывает либо на файл на web-сайте, либо на локальный файл, либо на файл chrome. Этот файл будет загружен при обработке шаблона, используя данные в XML файле. Например:

    <listbox datasources="http://www.xulplanet.com/ds/sample.xml" querytype="xml">
      <template>
        <listitem label="?name"/>
      </template>
    <listbox>
    

    Этот шаблон использует данные XML для создания списка элементов(listbox). Не смотря на то, что мы рассмотрим особенности процесса позже, уже сейчас можно сказать, что для каждого дочернего узла дерева данных XML будет создан элемент списка (listitem), атрибут label которого будет соответствовать имени узла в древе XML.

    Для источников данных на основе базы данных Sqlite, атрибут datasources определяет URI файла. Поскольку в этом случае поддерживаются только локальные файлы, используется URL файла.

    Конструктор шаблонов может также использовать несколько источников данных, объединяя их в единое целое - так, если бы это был один источник данных, если это возможно. Этот механизм поддерживает только встроенный RDF; источники данных на основе XML или Sqlite не поддерживают такой возможности. При использовании нескольких источников данных для управления ими создаётся объект с интерфейсом nsIRDFCompositeDataSource. Вы можете получить доступ к нему из скрипта, используя свойство 'database'. Таким образом, вы можете добавлять или исключать источники данных на лету.

    При использовании нескольких источников данных RDF они объединяются в единое целое так, если бы это был один большой источник. Это значит, что запрос в шаблоне может получить данные из любого источника, находящегося в этом объединении. Это в самом деле может быть полезным свойством и работает одинаковым образом независимо от источника данных. Например, вы можете использовать встроенный источник, хранящий информацию о пользовательских закладках в браузере и использовать собственный источник данных для добавления дополнительной информации об этих закладках.

    <vbox datasources="rdf:bookmarks http://www.xulplanet.com/ds/sample.rdf">
    

    Кроме того, при использовании RDF для chrome XUL (таких как расширения), источник данных rdf:local-store всегда включается в смесь источников. Локальное хранилище (local-store) - это источник данных, хранящий различную информацию о состоянии элементов пользовательского интерфейса, таких как размеры окон, список выбранных колонок и раскрытых элементах дерева. Хотя это и редко используется, вы можете запросить любые данные из локального хранилища для использования в шаблоне.

    Иногда вам будет необходимо указать, что источник данных будет определён позже, возможно с помощью скрипта. В этом случае используется специальная форма URI, содержащая префикс rdf:null, обозначающая, что используется пустой источник данных или то, что он будет определён позже. Эта запись также работает и с источниками данных, отличными от RDF, поэтому не стесняйтесь при необходимости использовать её. Это удобная форма указать на то, что для шаблона ещё не определён источник данных, и поэтому нет никаких результатов.

    Interwiki Language Links

    Метки документа и участники

    Contributors to this page: Bektur
    Обновлялась последний раз: Bektur,