Как получить значение из конструктора форм в качестве метки триггера?

Я работаю над пользовательским контролем в Orbeon. В конструкторе форм в настройках есть поле с именем buttonName. Его значение должно отображаться как метка кнопки, видимая в бегуне формы.

Я перемещаю старый файл, который предположительно работал на старой версии orbeon. Я попытался изменить способ обращения к значению из конструктора форм. Ниже я показываю старый код, без моих изменений.

В метаданных построителя форм я объявил ввод с помощью ref:

<xbl:binding element="fr|custom-input" id="fr-custom-input-binding" xxbl:mode="lhha binding value">
        <!-- Orbeon Form Builder Component Metadata -->
        <metadata xmlns="http://orbeon.org/oxf/xml/form-builder" xmlns:xf="http://www.w3.org/2002/xforms">
...
<control-details>
<xf:input ref="@buttonName">
                    ...

Далее к этой привязке есть var

<xf:var name="binding" value="xxf:binding('fr-custom-input-binding')"/>

Наконец, ссылка в форме бегуна:

                <xf:trigger class="xbl-fr-custom-input-trigger">
...
                    <xf:label value="$binding/@buttonName"></xf:label>
                </xf:trigger>

person MiKk    schedule 13.05.2019    source источник
comment
И в чем проблема? Вы говорите, что поле ввода, которое вы определили в <control-details>, больше не отображается в деталях управления в новых версиях Orbeon Forms? Если да, то какую версию Orbeon Forms вы имеете в виду?   -  person avernet    schedule 13.05.2019
comment
Нет-нет, поле ввода в деталях управления отображается и работает корректно. Я пытаюсь получить значение из этого поля и показать его как метку кнопки в представлении.   -  person MiKk    schedule 14.05.2019
comment
Итак, ваш ввод отображается в диалоговом окне Control Details. Когда вы вводите туда значение и нажимаете «Сохранить», сохраняется ли оно в атрибуте buttonName в <fr:custom-input> в источнике вашей формы? Если нет, то есть ли атрибут, даже если он пустой? Я подозреваю, что это не работает для вас из-за #4030, который исправлено и будет в Orbeon Forms PE 2018.2.3 или Orbeon Forms CE 2019.1. Вы используете Orbeon Forms CE или PE?   -  person avernet    schedule 15.05.2019
comment
Да, значение сохраняется в атрибуте ввода. Я использую Orbeon Forms CE.   -  person MiKk    schedule 15.05.2019
comment
Хорошо, так что вы получите <fr:custom-input buttonName="Your value"> в источнике формы. Это хорошо. Тогда я бы предположил, что использование $binding/@buttonName в вашем компоненте XBL сработало бы. Можете ли вы попробовать указать исходный код компонента <xf:output value="'gaga'"/>, проверьте, видите ли вы гадость, если это работает, замените 'gaga' на exists($binding), если это возвращает true, замените его на exists($binding/@buttonName), если это возвращает true, замените его на $binding/@buttonName. Давайте посмотрим, сможем ли мы таким образом выяснить, где он терпит неудачу.   -  person avernet    schedule 16.05.2019
comment
exists($binding/@buttonName) возвращает ложь   -  person MiKk    schedule 16.05.2019
comment
Ах… моя беда: ваш атрибут относится к самому элементу управления, <fr:custom-input buttonName="Your value">, а не к элементу, к которому привязан элемент управления, на который указывает $binding. Так что $binding/@buttonName здесь не подходит. Итак, вместо этого то, что вы хотите иметь внутри своего <xbl:template> и <xf:var name="buttonName" xbl:attr="xbl:text=buttonName"/>. Затем вы можете ссылаться в XPath на значение атрибута как $buttonName. Вы дайте мне знать, если это сработает для вас.   -  person avernet    schedule 17.05.2019
comment
Привет, MiKk, спасибо за подтверждение, и я опубликовал немного расширенную версию моего комментария выше в качестве ответа ниже, поэтому людям, которые потенциально могут найти эту ветку с помощью поиска, не нужно читать все комментарии здесь. -Алекс   -  person avernet    schedule 30.05.2019


Ответы (1)


Вы хотите получить доступ к атрибуту самого элемента управления:

<fr:custom-input buttonName="Your value">

Это соответствует атрибуту, который вы могли бы иметь для элемента, к которому привязан элемент управления, на что указывает $binding. Так что $binding/@buttonName здесь не подходит. Вместо этого внутри вашего , вы хотите иметь:

<xf:var name="buttonName" xbl:attr="xbl:text=buttonName"/>

Затем вы можете ссылаться в XPath на значение атрибута как $buttonName.

person avernet    schedule 30.05.2019