В пределах модели определяется тег <bind>; он позволяет сделать данные экземпляра зависящими от других данных. Например, инструкция в Листинге 6 связывает TaxTotal с вычисляемым налогом (TaxRate умножается на SubTotal):
Вы можете воспользоваться атрибутом relevant для определения условий, при которых тег bind является допустимым и должен применяться. Например, вы можете связать TaxRate, как показано в Листинге 7:
Листинг 7. Инструкция bind и соответствующий атрибут <!--Within the Model--> Инструкция присваивает TaxRate (ref) ставку налога в штате Коннектикут только в том случае, если пользователь живет в этом штате (условие relevant). Если вы хотите выполнить эту процедуру для двух других штатов: Нью-Йорк и Нью-Джерси, определите аналогичные инструкции, связав TaxRate со значением соответствующего штата. Вы можете также использовать тег <bind> для различных ограничений данных экземпляра, например, указав тип данных с помощью атрибута type. В Листинге 8 показано, как сделать так, чтобы поле SubTotal было десятичным числом: Листинг 8. Инструкция bind и ограничение типа <!--Within the Model--> Существуют и другие способы ограничения данных экземпляра; полный список см. в Приложении E. XForms-процессор сверяет данные экземпляра с ограничениями, проверяя поле за полем. Если пользователь вводит данные, которые нарушают любое из ограничений, браузер, поддерживающий XForms, немедленно сообщит об этом пользователю. Благодаря этому, существенно повышаются удобство и простота использования, а обработчик получает только правильно оформленные данные.
<xforms:bind ref="/OrderInfo/PriceInfo/TaxRate"
calculate="/OrderInfo/TaxInfo/CT"
relevant="/OrderInfo/PersonalInfo/Address/State = 'CT'"/>
<xforms:bind ref="/OrderInfo/PriceInfo/SubTotal" type="xsd:decimal"/>
Более подробная информация о связываниях, зависимостях и ограничениях приведена в Спецификации (см.
Инициализация
Модель формы заказа была бы неполной без описания способа связи с сервером обработчика. Вы можете использовать тег <submission> и атрибут action, чтобы указать, какой вызов необходимо запустить при готовности пользователя к инициализации:
Более подробная информация о <submission> приведена в Спецификации.