Как использовать атрибут if в xforms с элементами html?
У меня есть <div>
элемент, который я хочу использовать на основе значения экземпляра xforms.
Что-то вроде:
<xf:trigger appearance="minimal" >
<xf:label >
..
<div if="instance('scope')= 'user'"> <!-- I know this doesn't work -->
</div>
..
</xf:label>
....
</xf:trigger>
Это атрибут "если", где мы проверяем значения экземпляра, доступные только с <xf:action>,<xf:submission> etc
, элементы, а не с обычными элементами HTML? Или есть способ, которым я скучаю?
2 ответа
Для условных HTML-элементов XForms позволяет определить элемент xf:group с атрибутом ref.
Хитрость для эмуляции "если" состоит в том, чтобы использовать предикат как в ".[Instance('scope') = 'user']": таким образом, узел контекста остается тем же, но содержимое xf:group будет отключено, если условие в предикате ложно.
Атрибут if действителен только для элементов действий XForms (XForms 1.1). Однако, как отметил Ален, вы можете использовать атрибут ref (который определен для всех элементов управления XForms) и использовать релевантность для достижения того, чего вы хотите (условное отображение элементов). Выражение привязки должно иметь логическое значение "истина" или "ложь", что, в свою очередь, делает элементы управления видимыми или невидимыми (релевантными).
Также триггерные элементы могут быть связаны с 'ref'. Так что для вашего примера вы могли бы иметь:
<xf:trigger ref="someXPath[. eq 'fooValue']">...</xf:trigger>
...
<xf:trigger ref="someXPath[. eq 'barValue']">...</xf:trigger>
Значение 'fooValue' будет отображать первый триггер. Значение 'barValue' будет отображать второй триггер.
Немного более многословно, чем ваш псевдокод, но работает.