Как сделать поле динамически доступным только для чтения, т.е. по событиям xforms-value-changed и другим событиям?

При изменении значения в раскрывающемся поле я хочу сделать поле только для чтения. Насколько мне известно в программировании, мы устанавливаем поле только для чтения при привязке поля. Есть ли способ сделать поле только для чтения в зависимости от событий?


person Akshay    schedule 25.08.2011    source источник


Ответы (1)


Я бы предложил решение, которое не требует явных обработчиков событий: вы можете использовать два набора элементов управления, один из которых доступен только для чтения, а другой доступен для редактирования. Чтобы переключаться между обоими наборами, вы можете поместить каждый из наборов в xforms:group с атрибутом ref, который определяет, отображается ли группа или нет.

Вот пример с группами, ссылающимися на взаимоисключающие условия. В зависимости от значения узла экземпляра selectedvalue отображается одна из групп. Если набор элементов select1 сложнее, чем просто 1 или 0, вам придется адаптировать XPath атрибутов xforms:group@ref.

<xforms:select1 appearance="minimal" ref="instance('main')/path/to/selectedvalue">
...
</xforms:select1>

<xforms:group ref="instance('main')/path/to/selectedvalue eq 1">
    <xforms:input ref="instance('main')/path/to/textinput" />
    <!-- more editable XForms controls, bound to main instance -->
</xforms:group>
<xforms:group ref="instance('main')/path/to/selectedvalue eq 0">
    <xforms:input ref="instance('read-only')/path/to/textinput" />
    <!-- more read-only XForms controls, bound to a read-only instance -->
</xforms:group>

Это решение имеет то преимущество, что обработка событий вообще не требуется (или, точнее, механизм XForms сам выполняет часть обработки событий; xforms:group сами действуют как «слушатели событий» для значения экземпляра). Также возможно комбинировать этот метод с явной обработкой событий: используя xforms:action ev:event="xforms-value-changed", который выдает xforms:setvalue ... на узле, наблюдаемом атрибутами xforms:group@ref.

person tohuwawohu    schedule 25.08.2011