Orbeon: экземпляр readony, влияющий на ссылки формы в зависимости от положения в модели относительно других экземпляров - PullRequest
0 голосов
/ 24 января 2012

Я наткнулся на странный дефект.Я использую Orbeon 3.9 CE на Tomcat.В зависимости от значения текстового поля = 'true' ссылка будет отображаться как на скриншоте.Обратите внимание, что триггер ссылается на «безопасный для данных» экземпляр для отображения и скрытия.

<xforms:trigger appearance="minimal" ref=".[instance('data-safe')/data-safe='true']">
    <xforms:label>
        Add
    </xforms:label>
</xforms:trigger>

Так должен выглядеть экран.expected functionality

Теперь для повышения производительности у меня есть один экземпляр с атрибутом xxforms:readonly="true"

1st instance read-only

Здесь 1-й экземпляртолько для чтения

затем отображаемая форма изменится на следующую.где ссылка для добавления отключена.add link disabled

теперь, если я изменю порядок экземпляра только для чтения с 1-й позиции в модели на где-то ниже.как показано readonly moved below

добавлена ​​ссылка для добавленияexpected functionality

Вот пример кода для объяснения проблемы

  <xhtml:head>

    <xhtml:title>SO question</xhtml:title>
    <!-- CSS StyleSheet test-->

    <!-- Link to the Model goes Here -->
    <!-- Needs exslt to do some fancy things with Dates and Time -->
    <xforms:model id="model">

        <!-- -->
        <!-- Places Instances Here -->
        <!-- -->


        <xforms:instance id="dropdown-values"   src="oxf:/apps/TSDM/global_instances/Dropdown-Values.xml" xxforms:readonly="true"/>

        <xforms:instance id="form-attributes">
            <attributes>
                <form-global>
                    <current-page>1</current-page> <!-- Always starts on 1 -->
                    <previous-page></previous-page> <!-- Always starts on 1 -->
                    <next-page></next-page> <!-- Always starts on 1 -->
                    <first-page>1</first-page> <!-- First Page Boundary: 1 always -->
                    <last-page>12</last-page> <!-- Last Page Boundary: Change based on form -->
                    <summary>false</summary> <!-- Enable Summary View indicator -->
                </form-global>
            </attributes>
        </xforms:instance>

        <xforms:instance id="data-safe">
            <flag>
                <data-safe>true</data-safe>
                <data-safe1></data-safe1>
            </flag>
        </xforms:instance>

    <xforms:bind id="group-level-specifications-credit-effective-end-date" nodeset="instance('data-safe')/data-safe"
                    calculate="."
                    readonly="false()"/>


    <!--xforms:bind nodeset="instance('data-safe')/data-safe1" type="xforms:date"
                    calculate="months(xforms:dayTimeDuration(../data-safe))"
                    readonly="false()"/-->

    </xforms:model>


</xhtml:head>
<!-- End of Head -->



<!-- Start of the Body of the Page -->
<xhtml:body class="MainBODY">

    <xforms:switch>
        <xforms:case>
            <xforms:trigger appearance="minimal" ref=".[instance('data-safe')/data-safe='true']">
                <xforms:label>
                    Add
                </xforms:label>

            </xforms:trigger>
        </xforms:case>
    </xforms:switch>
    <xforms:input ref="instance('data-safe')/data-safe" />
    <br/>
    <xforms:input ref="instance('data-safe')/data-safe1" />


</xhtml:body>

1 Ответ

0 голосов
/ 25 января 2012

Когда вы пишете <xforms:trigger ref=".[some condition]">, вы не только скрываете триггер, когда условие ложно, вы также привязываете его к любому узлу, на который указывает ..Если ваш триггер не находится внутри какого-либо элемента контейнера (<xforms:group>, ...), который изменяет контекст, контекст является корневым элементом первого экземпляра.Когда триггер привязан к узлу:

  1. Триггер не будет отображаться, если узел не релевантен.
  2. Триггер отображается как отключенный, если узел только для чтения.

Вы во втором случае не из-за <xforms:bind readonly="false()"/> в вашем коде, а потому, что когда вы помещаете xxforms:readonly="true" в экземпляр, все его узлы помечаются как доступные только для чтения.

Решение в вашем случае простое: переместите этот экземпляр как второй, как вы это сделали, или привяжите триггер к другому узлу, который не предназначен только для чтения, используя другое выражение XPath вместо ..

...