Как использовать атрибут 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' будет отображать второй триггер.

Немного более многословно, чем ваш псевдокод, но работает.

Другие вопросы по тегам