До появления связывания данных доступ к данным на Web-страницах производился на низкой скорости. (Скорость доступа в Internet уменьшалась по мере роста графика - особенно, если при использовании модема со скоростью передачи данных 28,8 Кбит/с.) Скорость отображения страниц, которые обращались к данным, была низкой. Это было обусловлено большей частью тем, что серверы не только содержали Web-страницы, но также обслуживали доступ к базам данных и объединение данных со страницами для создания законченной HTML-страницы для клиента. Более того, поскольку страница передавалась клиенту, то отсутствовал способ разделения между данными и кодом HTML, в котором они содержались. В результате, когда пользователю требовалось выполнить манипуляции с данными (например, чтобы выполнить сортировку в другом порядке), то ему приходилось обращаться на сервер для повторного доступа к тем же данным, их форматирования и передачи новой страницы клиенту. Серверу приходилось снова передавать клиенту те же данные, внедренные в HTML-страницу. Некоторым серверам также требовалось поддерживать состояние клиента, чтобы гарантировать согласованное отображение данных на экране пользователя. Все это приводило к тому, что работа пользователя напоминала работу терминала мэйнфрейма. К счастью, все это в прошлом.
Рассмотрим связывание данных (data binding). Связывание данных является элементом динамического HTML, позволяющим решать перечисленные проблемы. Связывание данных поддерживает различие между данными и кодом HTML, который отображает их. Данные передаются клиенту асинхронно и воспроизводятся асинхронно по мере поступления, подобно постепенно выводимому на экран изображению в формате GIF. Клиент может разделять данные и выполнять манипуляции, такие как сортировка, на локальном клиентском компьютере. При этом не требуется обмен данными с сервером. Такая автономия уменьшает число обращений на сервер и объем передаваемых данных. Web-страницы, построенные с использованием связывания данных, отображают данные быстрее, снимают нагрузку форматирования с сервера и обеспечивают более интерактивный и оперативный режим работы, исключая длительные паузы ожидания при загрузке страниц.
Цель данной главы заключается в предоставлении необходимой информации для построения HTML-страницы с использованием связывания данных, а также для установки ссылок при построении страниц со связыванием данных. В главе рассмотрены следующие темы:
Что такое связывание данных? Связывание данных является концепцией, введенной в динамическом HTML. В этом разделе дано определение термина связывание и вводятся концепции, которые будут рассмотрены в остальных частях данной главы.
Архитектура связывания данных. В этом разделе обсуждаются три компонента архитектуры связывания данных: объекты источника данных, HTML-расширения связывания данных и агент связывания и повторения. Исходные объекты данных поставляют данные на Web-страницы и инкапсулируют функции передачи, определения, манипулирования и доступа к сценариям. HTML-расширения связывания данных являются атрибутами, которые могут быть включены в HTML-элементы. Элементы, которые включают атрибуты связывания данных, называются потребителями данных (data consumers). Атрибуты определяют исходный объект данных, который поставляет данные элементу. Агент связывания и повторения распознает исходные объекты данных и потребителей данных на Web и синхронизирует передачу данных между элементами HTML и источником данных.
Потребители данных: HTML-элементы. Большое количество HTML-элементов поддерживает связывание данных. В разделе представлен список данных элементов и дано объяснение их использования для отображения и предоставления пользователю возможности взаимодействия с данными, поставляемыми объектом источника данных. В данном разделе также представлены примеры, которые демонстрируют связывание всех под-держиваемых HTML-элементов.
Построение базовых страниц с помощью связывания данных. В данном разделе обсуждается три базовых типа связывания: связывание текущей записи, связывание таблицы с повторением и связывание таблицы с разбиением. Связывание текущей записи отображает данные из текущей записи в связанных элементах. Для установки другой текущей записи в наборе записей можно использовать сценарий. Когда новая запись становится текущей, то связанные элементы обновляются для отображения данных из этой записи. Связывание таблицы с повторением позволяет разработчику многократно использовать набор HTML-элементов, называемых шаблоном, для построения таблицы, которая отображает все строки в наборе данных. Связывание таблиц с разбиением аналогично связыванию таблицы с повторением, что позволяет разработчику ограничить число записей, отображаемых в таблице. Таблицу с разбиением можно представить как окно в наборе записей. Используя сценарии, разработчик может затем перемещать это окно в наборе данных для отображения дополнительных данных.
Написание сценариев, использующих связывание данных. Как часть функциональных возможностей связывания данных для написания приложений разработчикам Web-страниц предоставляется расширенная модель событий. События предназначены для проверки, перемещения записей и асинхронной передачи данных. В разделе также описаны основы доступа к данным из объекта источника данных с использованием ADO (ActiveX Data Objects - объекты данных ActiveX).
Дополнительные возможности. В этом разделе приведен краткий обзор ряда дополнительных возможностей связывания данных, включая обновление данных, свойство recordNumber и доступ объектной модели к атрибутам связывания данных. В этом разделе обсуждается преобразование Web-страницы в приложение клиент/сервер путем активизации обновления данных. Свойство recordNumber, доступное из любого элемента в таблице с повторением и разбиением, позволяет разработчику Web-страницы легко определять запись из объекта источника данных, с которой связан элемент. В остальной части данной главы обсуждается добавление, удаление и модификация атрибутов связывания данных элементов с использованием объектной модели динамического HTML.
Прежде чем рассматривать три компонента архитектуры связывания данных, определим термин связь (binding). В упрощенной форме связывание представляет собой отношения между данными, поставляемыми объектом источника данных, и HTML-потребителем данных. Данное отношение называется связью, потому что значение элемента данных (который называется datem, что является сокращением от data item - элемента данных) синхронизировано между клиентом и сервером. Когда HTML-потребитель данных (например, текстовое окно HTML) модифицирует элемент данных, то модифицированный элемент данных сохраняется в объекте источника данных. Напротив, если объект источника данных изменяет значение данных, то модифицированный элемент данных отправляется потребителю данных. Путем дальнейшего обобщения многочисленные потребители могут быть связаны с одним элементом данных, и все значения всех потребителей будут синхронизированы со значением, указанным объектом источника данных. Значения в объекте источника данных связаны со значениями в одном или большем количестве потребителей данных.
Доступны два различных стиля связывания: связывание текущей записи (current record binding) и связывание таблицы с повторением (repeated table binding). Связывание текущей записи использует HTML-элементы для отображения данных из текущей записи в наборе записей. В качестве текущей могут быть установлены различные записи. В таком случае элементы обновляются динамически для отображения данных в записи. Связывание таблицы с повторением позволяет определить набор связанных элементов, называемых шаблоном, который повторяется один раз для каждой записи в наборе записей. Разработчики Web-страниц также имеют возможность ограничения числа записей, повторяющихся в таблице. Этот элемент называется разбиением таблицы.
Разбиение таблицы и два стиля связывания будут подробно рассмотрены ниже в разделе данной главы "Построение базовых страниц с использованием, связывания данных".
Архитектура связывания данных состоит из трех основных компонентов:
Объекты источников данных
HTML-расширения связывания данных, которые определяют потребителей данных
Агент связывания и построения
Объекты источников данных поставляют данные на страницу, а HTML-потребители данных отображают данные и обеспечивают взаимодействие пользователя с данными. Агент связывания и повторения обеспечивает поддержку стилей связывания. Дополнительно, агент связывания и повторения отвечает за синхронизацию всех связей с одиночным элементом данных, когда пользователи модифицируют данные на странице.
Объекты источников данных обеспечивают открытую архитектуру для поставки данных на Web-страницу. Объекты источников данных внедряются в Web-страницу при помощи тегов <APPLET> или <OBJECT>, как показано ниже:
<OBJECT ID="stocklist" WIDTH="0" HEIGHT="0"
CLASSID="clsid:333C7BC4-460F-11D0-BC04-0080C7055A83">
<PARAM NAME="DataURL" VALUE="stockdata.txt">
<PARAM NAME="FieldDelim" VALUE="|">
<PARAM NAME="TextQualifier" VALUE="">
<PARAM NAME="UseHeader" VALUE="true">
</OBJECT>
После вставки объекта источника данных на страницу могут быть определены потребители данных для отображения данных и взаимодействия с пользователем.
Объекты источника данных могут быть реализованы во множестве языков программирования, включая Java, Microsoft Visual Basic и Microsoft Visual C++. Объекты источников данных отвечают за четыре главные функции доступа к данным:
Обмен данных со страницей. Объекты источников данных должны реализовать механизмы извлечения данных для HTML-страницы. Объекты источников данных ответственны исключительно за передачу данных клиенту и, возможно, за передачу модификаций данных клиентом обратно на сервер. Они могут передавать данную информацию в любом подходящем режиме - используя HTTP (hypertext transfer protocol - протокол передачи гипертекста), FTP (file transfer protocol - протокол передачи файлов), доступ к локальным файлам или протоколы баз данных на основе соединения. Динамический HTML не накладывает никаких ограничений на передачу данных.
Большинство грамотно разработанных объектов источников данных будут поддерживать асинхронную передачу данных - то есть, объект источника данных будет выводить данные постепенно, по мере передачи их клиенту вместо ожидания всего набора данных и последующего его вывода на экран. Поскольку браузер Microsoft Internet Explorer 4.0 поддерживает постепенный вывод связанных данных, то использование объекта источника данных, который поддерживает асинхронную передачу, приведет к более быстрому отображению доступных для взаимодействия с пользователем данных, аналогично постепенному выводу на экран изображения в формате GIF.
Установка механизмов для определения передаваемых данных. Поскольку объекты источников данных отвечают за передачу данных, то они также ответственны за механизм, который определяет передаваемые (запрашиваемые) данные. Объекты источников данных могут свободно использовать язык запросов по своему выбору, URL, пути к файлам, другие процессы, другие объекты и другие средства определения совместимости данных с протоколом, который они используют для доступа к данным.
Обеспечение методов доступа к данным на клиентской машине. Объекты источника данных могут поддерживать свойства и методы манипулирования данными, которые они поставляют. Например, объекты источника данных, включенные в состав Internet Explorer 4.0, поддерживают свойства и методы сортировки и отбора данных, которые они поставляют. Когда вы устанавливаете данные свойства или вызываете данные методы из сценария, то объект источника данных выполняет манипулирование и, посредством передачи уведомлений агенту связывания и повторения, coобщает браузеру, что данные были изменены. Браузер в свою очередь обновляет связанные данные для отражения текущего порядка (для сортировки) или нового, сокращенного или расширенного набора данных (для отбора).
Объекты источников данных могут также поддерживать обновление данных. Объект источника данных может предоставить пользователю возможность изменения значений связанных HTML-элементов на Web-странице. Объект источника данных передает измененные данные обратно источнику данных, обычно базе данных или Web-серверу, где изменения будут сохранены. RDS (Remote Data Service - удаленная служба данных) является одним из таких объектов источника данных. RDS включена в минимальной конфигурации в Internet Explorer 4.0. Более подробную информацию о RDS можно найти на Web-узле компании Microsoft по адресу www.microsoft.com/data.
Сортировка, отбор и обновление не являются единственными манипуляциями, которые поддерживаются объектами источников данных. Объект источника данных может поддерживать любые манипуляции, соответствующие типу поставляемых данных. Например, объект источника данных, который содержит расписание выплат процентов за кредит, может представлять три свойства: процентную ставку, объем ссуды и срок выплаты. При изменении любого из данных свойств объект источника данных будет генерировать отличный набор данных, поскольку изменения значений изменят график выплаты процентов за ссуду.
Обеспечение объектной модели для доступа к данным с помощью сценария (объектная модель данных). В общем, связывание данных не требует или требует минимального сценария для построения базовых страниц, если только вам не требуется выполнять проверку, расчеты или манипуляции данными.
Браузер Internet Explorer 4.0 обеспечивает объектную модель ADO для каждого объекта источника данных. Однако объекты источника данных могут представлять свою собственную дополнительную объектную модель в условиях, когда к данным нельзя обращаться, используя ADO. Примером объекта источника данных является объект источника данных XML (extensible Markup Language - расширяемый язык разметки). На Web-узле компании Microsoft (по адресу www.microsoft.com/standards/xml) можно найти дополнительную информацию по данному вопросу.
Данные из источника данных отображаются на экране пользователя с помощью стандартных HTML-элементов. Ключом к данным элементам, отображающим данные, является добавление одного или более HTML-расширений связывания данных.
Примечание: Расширения связывания данных были предложены консорциуму W3C (Woid Wide Web Consortium) для включения в стандарт HTML.
Расширения связывания данных представляют собой четыре атрибута, которые могут быть добавлены к множеству элементов HTML. Атрибуты определяют объект источника данных, который поставляет данные в элемент, определяет связывание с определенным столбцом или полем объекта источника данных, определяет представление данных в виде обычного текста или в виде HTML, а также определяет, будет ли таблица с повторением отображать только подмножество данных, поставляемых объектом источник данных.
В следующих разделах данные атрибуты обсуждаются подробно. Полный список элементов, которые поддерживают атрибуты связывания данных, можно найти ниже в разделе данной главы "Потребители данных: элементы HTML".
Простой провайдер OLE-DB
В общем случае, объект источника данных считывает данные в кэш в памяти клиентского компьютера. Объект источника данных должен затем иметь возможность представить эти данные браузеру. Объекты источника данных осуществляют эту задачу путем реализации интерфейса OSP (OLE-DB Sin-pie Provider - простой провайдер OLE-DB) или прямо через OLE-DB, который является набором интерфейсов OLE для доступа к данным.
Браузер Internet Explorer 4.0 поддерживает все объекты источников данные, реализующих OSP. RDS, включенный в состав Internet Explorer 4.0, является единственным поддерживаемым провайдером OLE-DB для Internet Explorer 4.0. Поддержка произвольных провайдеров OLE-DB будет добавлена в будущих версиях, но в данном разделе рассматривается только OSP.
OSP является открытой спецификацией и совместим с JavaBeans (моделью компонентов для Java) и OLE. OSP предоставляет простой интерфейс для вывода данных из клиентского кэша. В большинстве случаев кэш клиентской стороны можно просматривать как массив или набор табличных данных, то есть набор данных, состоящий из строк, в котором каждая строка имеет одинаковое число столбцов. OSP предоставляет доступ по очереди к каждой ячейке этого массива данных. OSP поддерживает способность добавления и удаления строк. OSP также требует, чтобы объект источника данных генерировал уведомления при изменении ячеек или при добавлении или удалении строк. Данные уведомления используются агентом связывания и повторения браузера Internet Explorer 4.0 для поддержания в синхронизированном состоянии каждого связанного элемента со значениями данных текущей записи. Объекты источника данных, которые представляют OSP, могут быть реализованы на языках программирования Java, Microsoft Visual Basic 5.0 и Microsoft Visual C++, при помощи MFC (Microsoft Foundation Classes) или, что более предпочтительно, ATL (Application Transaction Language) 2.0.
Атрибут DATASRC
Атрибут DATASRC указывает объект источника данных, который поставляет данные. DATASRC установлен равным #<IDref>, где <IDref> является идентификатором объекта источника данных. Используя пример, приведенный в разделе "Объекты источников данных", атрибут DATASRC, указывающий на объект stocklist, можно представить следующим образом:
DATASRC=#stocklist
В общем, атрибут DATASRC не используется самостоятельно, а только в сочетании с атрибутом DATAFLD. Однако имеется одно исключение из этого правила: таблицы с повторением. Таблицы с повторением используют только атрибут DATASRC, поскольку связывание таблицы с повторением указывает только источник повторения. Связанные HTML-элементы внутри таблицы отображают и взаимодействуют с реальными данными.
Атрибут DATAFLD
Объекты источников данных представляют свои данные в табличной форме в виде множества строк с фиксированным количеством столбцов. Объект источника данных устанавливает имена столбцов, на которые можно ссылаться посредством интерфейса OSР. Определение имени столбца является обязанностью объекта источника данных. Атрибут DATAFLD указывает именованный столбец или поле, которое должно быть связано с объектом источника данных.
В общем случае вместе с атрибутом DATAFLD должен быть указан атрибут DATASRC. Однако для элемента внутри таблицы с повторением атрибут DATASRC опускается, поскольку он наследован из атрибута DATASRC элемента Table. Ниже в разделе данной главы "Связывание таблицы с повторением" приведена более подробная информация по этому вопросу.
Атрибут DATAFORMATAS
Атрибут DATAFORMATAS определяет формат данных, поставляемых объектом источника данных. DATAFORMATAS может принимать одно из трех значений: NONE, TEXT или HTML. По умолчанию устанавливается значение NONE. Если установлено значение NONE (или когда данный атрибут отсутствует), то в объекте источника данных запрашивается исходный тип, необходимый для потребителя данных, который почти всегда является текстом для элементов HTML. Если установлено значение TEXT, то у объекта источника данных запрашивается текстовое значение, независимо от основного типа данных столбца. Например, если объект источника типа данных поставляет столбец с целочисленными значениями, то потребуется преобразовать эти значения в строки, если значение атрибута DATAFORMATAS было равно TEXT.
Наиболее важно, что когда атрибут DATAFORMATAS имеет значение HTML, то данные, поставляемые объектом источника данных, интерпретируются как код HTML, а не как простой текст. Данные анализируются и все элементы HTML в них интерпретируются так, как будто они были представлены непосредственно на Web-странице. Путем установки значения атрибута DATAFORMATAS равным HTML можно сохранить код HTML вместе с данными, а не хранить код статически на странице.
Атрибут DATAPAGESIZE
Атрибут DATAPAGESIZE используется для таблицы с повторением и дает Web-мастеру возможность ограничить длину таблицы с повторением и, таким образом, общую длину страницы со связанными данными. Атрибут может быть положительным целым числом и используется в сочетании с атрибутом DATASRC.
Если атрибут DATAPAGESIZE не указан, то шаблон таблицы повторяется объектом источника записей для каждой записи. Добавление атрибута DATAFORMATAS в таблицу позволяет установить число повторений шаблона равным определенной величине. Строки, отображаемые в таблице, могут быть затем прокручены с помощью методов объектной модели динамического HTML-элемента Table.
Третьим компонентом архитектуры связывания данных является агент связывания и повторения (binding and repetition agent), который для краткости называется агентом связывания. Агент связывания является внутренним компонентом браузера Internet Explorer 4.0 и отвечает за интерпретацию атрибутов связывания данных и последующую передачу данных из объекта источника данных потребителям данных. Для реализации этой функции агент связывания выполняет ряд задач. Сначала агент связывания распознает объекты источников данных и потребителей данных, находящихся на странице или добавляемых динамически на страницу с помощью объектной модели динамического HTML. Агент связывания отслеживает, какие объекты источников данных доступны и с какими столбцами объекта источника данных связаны потребители данных.
Агент связывания также выполняет обработку в соответствии с установленным типом связывания. Для связывания текущей записи агент связывания поставляет данные из текущей записи потребителям данных. Когда новая запись становится текущей, то агент связывания поставляет потребителям данных информацию из новой текущей записи. При связывании таблицы с повторением агент связывания повторяет шаблон таблицы для каждой записи, поставляемой объектом источника данных. Индивидуальные связанные элементы внутри таблицы являются значениями, поставляемыми из соответствующего столбца для каждой записи в объекте источника записей.
Второй функцией агента связывания является поддержание данных потребителей данных и объектов источников данных в синхронизированном состоянии. В действительности при этом выполняются две задачи. Агент связывания отслеживает объекты источников данных и обнаруживает изменения данных путем обработки уведомлений. Когда данные, с которыми связан HTML-элемент, изменяются, то агент связывания распространяет изменения на связанный элемент. Аналогичным образом, когда пользователь изменяет значение связанного элемента при взаимодействии с таблицей, то агент связывания передает изменение обратно объекту источника данных. Наконец, агент связывания отвечает за запуск событий сценариев для объектов источников данных и потребителей данных. События предоставляются потребителями данных, что позволяет Web-мастерам писать сценарии, которые проверяют вводимые пользователем данные или отвечают на предпринимаемые пользователем действия, такие как установка новой текущей записи. Более подробную информацию о доступных событиях сценариев можно найти ниже в разделе данной главы "Написание сценариев с использованием связывания данных".
При связывании данных используются стандартные HTML-элементы, включающие HTML-элементы Form, базовые HTML-конструкции, такие как Anchor и Image, более эзотерические конструкции типа Object и Applet, простые контейнеры для других HTML-элементов, таких как DIV и Span, и элементы Table для повторения элементов из набора данных. В данном разделе представлено подробное объяснение каждого потребителя данных, начиная с базовых потребителей и заканчивая более сложными элементами.
Элементы DIV и Span представляют собой простые контейнеры для текстовых элементов и других HTML-элементов. Поскольку DIV и Span являются блочными элементами (они имеют открывающий и закрывающий теги), то связывание этих элементов состоит в связывании содержания. Оба элемента поддерживают атрибут DATAFORMATAS и могут быть связаны с данными HTML в столбце объекта источника данных. Содержание элементов не может быть изменено в средстве просмотра страницы. Поэтому связывания с элементами DIV и Span доступны только для чтения.
Примечание: Данные могут быть, тем не менее, изменены посредством объектной модели данных. В этом случае изменения данных из сценария будут отражены в связанных элементах DIV и Span.
<DIV DATASRC=#stocklist DATAFLD="Symbol" DATAFORMATAS=TEXT></DIV>
<SPAN DATASRC=#stocklist DATAFLD="ChangeF" DATAFORMATAS=HTML></SPAN>
Ниже перечислены типы элемента Input, которые поддерживают связывание данных:
TYPE=TEXT - Связывание данных активизирует связывание с атрибутом VALUE текстового окна и при поддержке нормального режима операций текстового окна позволяет пользователю редактировать значение. Изменения элемента сохраняются в объекте источника данных. Пример связывания текстового окна:
<INPUT TYPE=TEXT DATASRC=#stocklist DATAFLD="Shares">
TYPE=RADIO - Связывание данных связывает атрибут VALUE с группой кнопок-переключателей, имеющих одинаковое значение атрибута NAME. Атрибуты DATASRC и DATAFLD должны быть добавлены во все кнопки-переключатели в группе. Если связанное значение из источника данных не совпадает со значениями связанных кнопок-переключателей, то кнопка-переключатель не будет выбрана. Когда пользователь выбирает кнопку-переключатель, то соответствующее значение сохраняется в объекте источника данных.
Пример группы кнопок-переключателей со связанными данными приведен ниже:
<INPUT TYPE=RADIO VALUE=S DATASRC=#stocklist
DATAFLD="Type">Short
<INPUT TYPE=RADIO VALUE=L DATASRC=#stocklist
DATAFLD="Type">Long
TYPE=CHECKBOX - Модель поведения связывания данных флажка существенно отличается от его модели поведения в HTML-форме. Флажки со связанными данными связывают логическое значение, а не атрибут VALUE флажка. Флажок со связанными данными принимает значение True или False.
Пример флажка со связанными данными показан ниже:
<INPUT TYPE=CHECKBOX DATASRC=#stocklist DATAFLD="ExDiv">
TYPE=HIDDEN - Скрытый элемент связывания данных полезен только в комбинированных страницах, которые используют связывание данных в сочетании с кнопкой Submit (Отправить). Атрибут VALUE скрытого элемента связывания данных является связанным. При отправке HTML-формы, которая содержит скрытый элемент связывания данных, значение скрытого элемента будет отправлено на сервер.
Пример скрытого элемента со связанными данными показан ниже:
<INPUT TYPE=HIDDEN DATASRC=#stocklist DATAFLD="DateUpdated">
TYPE=PASSWORD - Поля пароля со связанными данными имеют точно такую же модель поведения, как и текстовые окна со связанными данными. Их атрибут VALUE связан, и значение, вводимое пользователем, сохраняется в объекте источника данных.
Примечание: Элементы Input не требуют включения элемента Form, когда используется связывание данных. Также не требуется кнопка Submit (Отправить).
Связывание данных элемента TextArea связывает весь текст, находящийся в текстовом окне со множеством строк, с одним столбцом.
Пример элемента TextArea со связыванием данных показан ниже:
<TEXTAREA DATASRC=#stocklist DATAFLD="News">
Как и для элементов DIV и Span, связывание с элементом Marquee обеспечивает связывание с содержанием элемента. Вы можете при желании добавить атрибут DATAFORMATAS=HTML для указания, что связанными данными является код HTML. После этого данные будут проанализированы и воспроизведены браузером.
Пример элемента Marquee со связыванием данных показан ниже:
<MARQUEE DATASRC=#stocklist DATAFLD="Last" DATAFORMATAS=HTML>
</MARQUEE>
Элемент Select со связыванием данных позволяет связывать одиночный выбранный элемент из списка. Атрибут VALUE выбранного элемента Option представляет собой значение, сохраняемое в связанном столбце объекта источника данных. Когда значение в объекте источника данных не соответствует значениям, определенным элементом Option в элементе Select, то значения не выделяются. Элементы Select со связыванием данных могут использовать/раскрывающийся список или раскрывающееся поле со списком для взаимодействия с пользователем в зависимости от установки атрибута SIZE. Атрибут MULTIPLE игнорируется в элементах Select со связыванием данных, поскольку невозможно связать элемент более чем с одним значением из одного столбца.
Пример раскрывающегося поля со списком со связыванием данных приведен ниже:
<SELECT DATASRC=#stocklist DATAFLD="Type">
<OPTION VALUE=L>Long
<OPTION VALUE=S>Short
</SELECT>
Раскрывающийся список со связыванием данных использует приведенный ниже элемент Select:
<SELECT SIZE=2 DATASRC=#stocklist DATAFLD="Type">
<OPTION VALUE=L>Long
<OPTION VALUE=S>Short
</SELECT>
Хотя список вариантов для элемента Select не может быть связан непосредственно с объектом источника данных, но это возможно с помощью сценария, для заполнения вариантов элемента Select из объекта источника данных. Приведенный ниже код иллюстрирует данный метод:
<!-- Объект источника данных поставляет варианты для элемента Select -->
<OBJECT ID="selectlist" WIDTH="0" HEIGHT="0"
CLASSID="clsid:333C7BC4-460F-11D0-BC04-0080C7055A83">
<PARAM NAME="DataURL" VALUE="selectdata.txt">
<PARAM NAME="UseHeader" VALUE="True">
</OBJECT>
<!-- Заполняемый список -->
<SELECT ID=typeselect>
</SELECT>
<SCRIPT FOR=window EVENT=onload() LANGUAGE="JavaScript">
var i, newop;
selectlist.recordset.MoveFirst();
for (i = 1; i <= selectlist.recordset.AbsolutePosition; i++) {
newop = document.createElement("option");
newop.value = selectlist.recordset("value");
newop.text = selectlist.recordset("display");
typeselect.add(newop);
selectlist.recordset.MoveNext(); }
</SCRIPT>
Обработчик события onload окна читает данные из объекта источника данных и добавляет вариант для каждой записи в данных в элемент select. Метод MoveFirst и свойство AbsolutePosition обсуждаются ниже в разделах данной главы "Методы Move" и "Свойство recordNumber".
Связывание данных поддерживает связывание атрибута SRC элемента IMG. Значение, поставляемое связыванием, должно быть адресом URL файла отображаемого изображения. Адрес URL может быть абсолютным или относительным. Когда используется относительный URL, то для создания полного URL с целью извлечения файла изображения используется базовый URL документа или URL, указанный в теге <BASE>. Загрузка файла изображения выполняется так, как будто элемент IMG был статически определен внутри документа, то есть данные изображения загружаются в нитях, доступных для браузера.
Пример элемента IMG со связыванием данных:
<IMG DATASRC=#stocklist DATAFLD="Chart">
В динамическом HTML поддерживается связывание с атрибутом HREF элемента Anchor по аналогии с элементом IMG. Подразумевается, что связанное значение является относительным или абсолютным URL. К элементу Anchor применимы те же правила, которые применяются к элементу IMG. Пример элемента Anchor со связыванием данных:
<A DATASRC=#stocklist DATAFLD="Website">...</A>
Вы можете включить связанный текст в элемент Anchor, используя якорь в комбинации с другими элементами, такими как элемент Span. В приведенном ниже примере в качестве гиперссылки на Web-узел компании используется сокращенное название акции (symbol):
<A DATASRC=#stocklist DATAFLD="Website">
<SPAN DATASRC=#stocklist DATAFLD="Symbol"></SPAN>
</A>
Можно связать содержание элемента Button путем включения атрибутов DATASRC и DATAFLD элемента. На поверхности кнопки будет отображен связанный с ней текст. Атрибут DATAFORMATAS может быть также использован при связывании для отображения HTML на поверхности кнопки.
Пример элемента Button со связыванием данных:
<BUTTON DATASRC=#stocklist DATAFLD="Chart" DATAFORMATAS=HTML></BUTTON>
Связывание элемента Label аналогично связыванию элемента Button. Содержание элемента Label является связанным, и связывание может содержать код HTML. Но следует иметь в виду, что элементы Label не могут быть использованы внутри таблицы с повторением. Поскольку элемент Label связан с элементом управления путем установки значения его атрибута FOR равным идентификатору связанного элемента управления, то невозможно уникальным образом назначить элемент Label одиночному элементу управления в таблице с повторением.
Вы можете также связать произвольное число свойств элементов управления ActiveX и апплетов Java. Для связывания свойства элемента Object или Applet необходимо включить атрибуты DATASRC и DATAFLD в тег , который определяет имя связываемого свойства. Следующий пример показывает связи с цветом текста и фона для элемента управления или апплета:
<APPLET CODE=myapplet.class>
<PARAM NAME="backcolor" VALUE="green"
DATASRC="#dsc1" DATAFLD="color">
<PARAM NAME="forecolor" VALUE="yellow"
DATASRC="#dsc1" DATAFLD="textcolor">
.
.
.
</APPLET>
Для связывания апплетов Java элемент Applet должен быть реализован в соответствии со спецификациями JavaBeans для свойств, то есть должны быть соответствующие общие методы get и set для свойства, определенного атрибугом NAME тега <PARAM>. Как и для элементов ActiveX, не требуется, чтобы элемент Applet генерировал уведомления изменения свойств.
Элементы объекта (элементы управления ActiveX) работают точно так же, как и элементы Applet. Пример элемента Object со связыванием данных показан ниже:
<OBJECT CLSID="...">
<PARAM NAME="backcolor" VALUE="blue"
DATASRC="#dsc1" DATAFLD="color">
<PARAM NAME="forecolor" VALUE="white"
DATASRC="#dsc1" DATAFLD="textcolor">
.
.
.
</OBJECT>
Элемент управления ActiveX должен поддерживать свойство, имя которого определено атрибутом NAME тега <PARAM>. Большинство элементов управления ActiveX генерируют уведомления, когда значение свойства изменяется. Однако связывание данных этого не требует.
Элементы управления ActiveX могут определять свойство по умолчанию для связывания путем установки флага DefaultBind во вводимой информации для свойства. Связывание данных поддерживает связывание с данным свойством по умолчанию путем установки атрибутов DATASRC и DATAFLD непосредственно для элемента Object:
<OBJECT CLSID="..." DATASRC="#dsc1" DATAFLD="text">
<PARAM NAME="backcolor" VALUE="blue"
DATASRC="#dsc1" DATAFLD="color">
<PARAM NAME="forecolor" VALUE="white"
DATASRC="#dsc1" DATAFLD="textcolor">
.
.
.
</OBJECT>
Обратите внимание, что вы можете совместить связывание по умолчанию с любым числом связей с элементом Param.
Вы можете связать атрибуты HREF элементов Frame и IFrame. В обоих случаях связанные данные должны содержать URL. Различия обусловлены тем, что элементы IFrame могут существовать на любой странице. Элемент IFrame может быть использован подобно другим элементам, которые поддерживают связывание данных, путем добавления атрибутов DATASRC и DATAFLD:
<IFRAME DATASRC=#stocklist DATAFLD="Website">
С другой стороны, элемент IFrame должен существовать внутри элемента Frameset, а не внутри тела HTML-документа. Для использования преимуществ связывания Frame объект источника данных должен быть размещен внутри элемента Head HTML-документа, который содержит элемент Frameset:
<HTML>
<HEAD>
<OBJECT ID="stocklist" WIDTH="0" HEIGHT="0"
CLASSID="clsid:333C7BC4-460F-11D0-BC04-0080C7055A83">
<PARAM NAME="DataURL" VALUE="stockdata.txt">
<PARAM NAME="FieldDelim" VALUE="|">
<PARAM NAME="TextQualifier" VALUE="">
<PARAM NAME="UseHeader" VALUE="true">
</OBJECT>
</HEAD>
<FRAMESET>
<FRAME DATASRC=#stocklist DATAFLD="Website">
</FRAMESET>
</HTML>
Связывание с элементом Frame полезно, когда требуется предоставить пользователю возможность просмотра последовательности списка URL. Связывание текущей записи используется с элементом Frame, и при удалении текущей записи элемент Frame отображает данные из нового URL, поставляемого объектом источника данных. Элементы Frame не могут быть использованы внутри таблицы с повторением.
Последним поддерживаемым потребителем данных является элемент Table. Элемент Table является специальным потребителем данных - он является контейнером для остальных связей, не устанавливая связывание непосредственно с данным элементом. Связывание элемента Table определяет, что содержание таблицы, исключая элементы THead и TFoot, повторяется в наборе данных, определяемых атрибутом DATASRC:
<TABLE DATASRC=#stocklist>
.
.
.
</TABLE>
Когда содержание таблицы повторяется, то связанный элемент внутри элемента Table принимает его данные из текущей записи и из последующих записей в источнике записей. В приведенном ниже примере таблица отображает список всех условных обозначений акций с указанием последней котировки, изменения и объема продаж из источника данных с именем stocklist:
<TABLE ID="stocktbl" DATASRC="#stocklist" BORDER=1>
<THEAD>
<TR ONCLICK="sort();">
<TD CLASS=thd><DIV ID=Symbol>Symbol</DIV></TD>
<TD CLASS=thd><DIV ID=Last>Last</DIV></TD>
<TD CLASS=thd><DIV ID=Change>Change</DIV></TD>
<TD CLASS=thd><DIV ID=Volume>Volume</DIV></TD>
</TR>
</THEAD>
<TBODY>
<TR>
<TD><A DATAFLD="Website">
<SPAN DATAFLD="Symbol"></SPAN></A>
</TD>
<TD ALIGN=right>
<DIV DATAFLD="Last"></DIV>
</TD>
<TD ALIGN=right>
<SPAN DATAFLD="ChangeF" DATAFORMATAS=HTML></SPAN>
</TD>
<TD ALIGN=right><DIV DATAFLD="Volume"></DIV></TD>
</TR>
</TBODY>
</TABLE>
На рис. 15.1 показана полученная в результате таблица.
Рис. 15.1. Пример таблицы с повторением
В табл 15.1 перечислены потребители данных, атрибуты связывания данных, которые они поддерживают, и указана возможность поддержки обновления данных.
Таблица 15.1. Список потребителей данных
|
||||||
Тег | Связанный атрибут | D A T A S R C |
D A T A F L D |
D A T A F O R M A T A S |
D A T A P A G E S I Z E |
Обновление данных |
|
||||||
<DIV> | Содержание | X | X | X | ||
<SPAN> | Содержание | X | X | X | ||
<INPUT TYPE=TEXT> | VALUE | X | X | X | ||
<INPUT TYPE=RADIO> | VALUE | X | X | X | ||
<INPUT TYPE=CHECKBOX> | Логический, соответствующий проверяемому состоянию | X | X | X | ||
<INPUT TYPE=HIDDEN> | VALUE | X | X | |||
<INPUT TYPE=PASSWORD> | VALUE | X | X | X | ||
<TEXTAREA> | Содержание | X | X | X | ||
<MARQUEE> | Содержание | X | X | X | ||
<SELECT> | Выбранный элемент | X | X | X | ||
<IMG> | SRC | X | X | |||
<A> | HREF | X | X | |||
<BUTTON> | Содержание | X | X | X | ||
<LABEL> | Содержание | X | X | X | ||
<OBJECT> or <APPLET> | Свойство по умолчанию | X | X | X | ||
<PARAM> | Свойство объекта или апплета | X | X | X | ||
<FRAME> | HREF | X | X | |||
<IFRAME> | HREF | X | X | |||
<TABLE> | Повторение | X | X | |||
|
|
|
Поле | Тип данных |
|
|
Symbol | text |
Last | float |
Change | float |
ChangeF | text |
Volume | int |
%Change | float |
DateUpdated | text |
High | float |
Low | float |
Open | float |
Close | float |
52WeekHigh | float |
52WeekLow | float |
PERatio | float |
CompanyName | text |
Shares | int |
Website | text |
Chart | text |
Type | text |
ExDiv | text |
|
|
|
Значение | Описание |
|
|
0 | Передача была завершена без ошибок |
1 | Пользователь прервал передачу. В общем случае, данное прерывание возникает, когда пользователь нажимает кнопку Stop (Стоп) на странице |
2 | Передача привела к возникновению ошибки. Это общий случай для различных срывов передачи, включая невозможность связи с хостом или разрыва соединения |
|