Wie kann ich festlegen, dass die relevante Eigenschaft eines Orbeon-Elements davon abhängt, ob ein vorheriges Element besucht wurde oder nicht?

Ich versuche, in einer Form einige Elemente zu erstellen, die sichtbar sind, ob ein bestimmtes Element besucht wurde oder nicht. Ist es möglich?

In diesem Moment kann ich nur erreichen, dass der relevante Teil des ersten Elements in den anderen kopiert wird, aber in dem Fall, dass ein Element von vielen anderen Elementen abhängt, ist die relevante Regel zu groß. Dann suche ich nach einem Weg, um dies zu vereinfachen: Gibt es irgendeine Funktion wie "isVisible ()"?

So etwas wie (d. H. Control-2 muss nur sichtbar sein, wenn control-1 sichtbar ist):

<xf:bind id="control-2-bind" ref="control-2" name="control-2" relevant="isVisible($control-1)"/>

BEARBEITET: Ein Beispiel für ein Formular, in dem Kontrolle-5 nur angezeigt werden muss, wenn Kontrolle-4 angezeigt wird.

<xh:html xmlns:xh="http://www.w3.org/1999/xhtml" xmlns:xf="http://www.w3.org/2002/xforms"
     xmlns:xs="http://www.w3.org/2001/XMLSchema"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns:ev="http://www.w3.org/2001/xml-events"
     xmlns:xi="http://www.w3.org/2001/XInclude"
     xmlns:xxi="http://orbeon.org/oxf/xml/xinclude"
     xmlns:xxf="http://orbeon.org/oxf/xml/xforms"
     xmlns:exf="http://www.exforms.org/exf/1-0"
     xmlns:fr="http://orbeon.org/oxf/xml/form-runner"
     xmlns:saxon="http://saxon.sf.net/"
     xmlns:sql="http://orbeon.org/oxf/xml/sql"
     xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
     xmlns:xxforms="http://orbeon.org/oxf/xml/xforms"
     xmlns:fb="http://orbeon.org/oxf/xml/form-builder">
<xh:head>
    <xh:title>Untitled Form</xh:title>
    <xf:model id="fr-form-model" xxf:expose-xpath-types="true">

        <!-- Main instance -->
        <xf:instance id="fr-form-instance">
            <form>
                <section-1>
                    <control-3/>
                    <control-4/>
                    <control-5/>

                </section-1>
            </form>
        </xf:instance>

        <!-- Bindings -->
        <xf:bind xmlns:dataModel="java:org.orbeon.oxf.fb.DataModel" id="fr-form-binds"
                 ref="instance('fr-form-instance')">
            <xf:bind id="section-1-bind" name="section-1" ref="section-1">
                <xf:bind id="control-3-bind" ref="control-3" name="control-3"/>
                <xf:bind id="control-4-bind" ref="control-4" name="control-4"
                         relevant="$control-3='one'"/>
                <xf:bind id="control-5-bind" ref="control-5" name="control-5"
                         relevant="xxforms:visited($control-4)"/>

            </xf:bind>
        </xf:bind>

        <!-- Metadata -->
        <xf:instance xxf:readonly="true" id="fr-form-metadata">
            <metadata>
                <application-name>asd</application-name>
                <form-name>asd</form-name>
                <title xml:lang="en">Untitled Form</title>
                <description xml:lang="en"/>
            </metadata>
        </xf:instance>

        <!-- Attachments -->
        <xf:instance id="fr-form-attachments">
            <attachments>
                <css mediatype="text/css" filename="" size=""/>
                <pdf mediatype="application/pdf" filename="" size=""/>
            </attachments>
        </xf:instance>

        <!-- All form resources -->
        <!-- Don't make readonly by default in case a service modifies the resources -->
        <xf:instance id="fr-form-resources" xxf:readonly="false">
            <resources>
                <resource xml:lang="en">
                    <control-3>
                        <item>
                            <label>First choice</label>
                            <value>one</value>
                        </item>
                        <item>
                            <label>Second choice</label>
                            <value>two</value>
                        </item>
                        <item>
                            <label>Third choice</label>
                            <value>three</value>
                        </item>
                        <label/>
                        <hint/>
                    </control-3>
                    <control-4>
                        <label>Input</label>
                        <hint/>
                    </control-4>
                    <control-5>
                        <label>Visited</label>
                        <hint/>
                    </control-5>
                    <section-1>
                        <label>Untitled Section</label>
                    </section-1>

                </resource>
            </resources>
        </xf:instance>

        <!-- Utility instances for services -->
        <xf:instance id="fr-service-request-instance" xxf:exclude-result-prefixes="#all">
            <request/>
        </xf:instance>

        <xf:instance id="fr-service-response-instance" xxf:exclude-result-prefixes="#all">
            <response/>
        </xf:instance>

    </xf:model>
</xh:head>
<xh:body>
    <fr:view>
        <fr:body xmlns:xbl="http://www.w3.org/ns/xbl"
                 xmlns:dataModel="java:org.orbeon.oxf.fb.DataModel"
                 xmlns:oxf="http://www.orbeon.com/oxf/processors"
                 xmlns:p="http://www.orbeon.com/oxf/pipeline">
            <fr:section id="section-1-control" bind="section-1-bind">
                <xf:label ref="$form-resources/section-1/label"/>
                <fr:grid>
                    <xh:tr>
                        <xh:td>
                            <xf:select1 id="control-3-control" appearance="full" bind="control-3-bind">
                                <xf:label ref="$form-resources/control-3/label"/>
                                <xf:hint ref="$form-resources/control-3/hint"/>

                                <xf:alert ref="$fr-resources/detail/labels/alert"/>
                                <xf:itemset ref="$form-resources/control-3/item">
                                    <xf:label ref="label"/>
                                    <xf:value ref="value"/>
                                </xf:itemset>
                            </xf:select1>

                        </xh:td>

                    </xh:tr>
                    <xh:tr>
                        <xh:td>
                            <xf:input id="control-4-control" bind="control-4-bind">
                                <xf:label ref="$form-resources/control-4/label"/>
                                <xf:hint ref="$form-resources/control-4/hint"/>
                                <xf:alert ref="$fr-resources/detail/labels/alert"/>


                            </xf:input>
                        </xh:td>
                    </xh:tr>
                    <xh:tr>
                        <xh:td>
                            <xf:output id="control-5-control" bind="control-5-bind">
                                <xf:label ref="$form-resources/control-5/label"/>
                                <xf:hint ref="$form-resources/control-5/hint"/>

                                <xf:alert ref="$fr-resources/detail/labels/alert"/>
                            </xf:output>
                        </xh:td>
                    </xh:tr>
                </fr:grid>
            </fr:section>
        </fr:body>
    </fr:view>
</xh:body>

Der Code funktioniert nicht. Die Kontrolle-5 wird nie gezeigt. Was ist da los?

BEARBEITET: Ein Beispiel mit der vorgeschlagenen Lösung "Instanz ('besucht')"

<xh:html xmlns:xh="http://www.w3.org/1999/xhtml" xmlns:xf="http://www.w3.org/2002/xforms"
     xmlns:xs="http://www.w3.org/2001/XMLSchema"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns:ev="http://www.w3.org/2001/xml-events"
     xmlns:xi="http://www.w3.org/2001/XInclude"
     xmlns:xxi="http://orbeon.org/oxf/xml/xinclude"
     xmlns:xxf="http://orbeon.org/oxf/xml/xforms"
     xmlns:exf="http://www.exforms.org/exf/1-0"
     xmlns:fr="http://orbeon.org/oxf/xml/form-runner"
     xmlns:saxon="http://saxon.sf.net/"
     xmlns:sql="http://orbeon.org/oxf/xml/sql"
     xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
     xmlns:xxforms="http://orbeon.org/oxf/xml/xforms"
     xmlns:fb="http://orbeon.org/oxf/xml/form-builder">
<xh:head>
    <xh:title>Untitled Form</xh:title>
    <xf:model id="fr-form-model" xxf:expose-xpath-types="true">

    <!-- Main instance -->
    <xf:instance id="fr-form-instance">
            <form>
                <section-1>
                    <control-3/>
                    <control-4/>
                    <control-5/>
                </section-1>
            </form>
        </xf:instance>

        <!-- Bindings -->
    <xf:bind xmlns:dataModel="java:org.orbeon.oxf.fb.DataModel" id="fr-form-binds"
                 ref="instance('fr-form-instance')">
            <xf:bind id="section-1-bind" name="section-1" ref="section-1">
                <xf:bind id="control-3-bind" ref="control-3" name="control-3"/>
                <xf:bind id="control-4-bind" ref="control-4" name="control-4"
                         relevant="$control-3='one'"/>
                <xf:bind id="control-5-bind" ref="control-5" name="control-5"
                         relevant="instance('visited') = 'true' and string-length($control-4)&gt;0"/>
            </xf:bind>
        </xf:bind>

        <!-- Keep track of visited status -->
    <xf:instance id="visited">
            <visited/>
        </xf:instance>
        <xf:setvalue ev:event="xxforms-visited" observer="control-4-control"
                     ref="instance('visited')"
                     value="'true'"/>
        <xf:setvalue ev:event="xxforms-unvisited" observer="control-4-control"
                     ref="instance('visited')"
                     value="'false'"/>

        <!-- Metadata -->
    <xf:instance xxf:readonly="true" id="fr-form-metadata">
            <metadata>
                <application-name>asd</application-name>
                <form-name>asd</form-name>
                <title xml:lang="en">Untitled Form</title>
                <description xml:lang="en"/>
            </metadata>
        </xf:instance>

        <!-- Attachments -->
    <xf:instance id="fr-form-attachments">
            <attachments>
                <css mediatype="text/css" filename="" size=""/>
                <pdf mediatype="application/pdf" filename="" size=""/>
            </attachments>
        </xf:instance>

        <!-- All form resources -->
    <!-- Don't make readonly by default in case a service modifies the resources -->
    <xf:instance id="fr-form-resources" xxf:readonly="false">
            <resources>
                <resource xml:lang="en">
                    <control-3>
                        <item>
                            <label>First choice</label>
                            <value>one</value>
                        </item>
                        <item>
                            <label>Second choice</label>
                            <value>two</value>
                        </item>
                        <item>
                            <label>Third choice</label>
                            <value>three</value>
                        </item>
                        <label/>
                        <hint/>
                    </control-3>
                    <control-4>
                        <label>Input</label>
                        <hint/>
                    </control-4>
                    <control-5>
                        <label>Visited</label>
                        <hint/>
                    </control-5>
                    <section-1>
                        <label>Untitled Section</label>
                    </section-1>

                </resource>
            </resources>
        </xf:instance>

        <!-- Utility instances for services -->
    <xf:instance id="fr-service-request-instance" xxf:exclude-result-prefixes="#all">
            <request/>
        </xf:instance>

        <xf:instance id="fr-service-response-instance" xxf:exclude-result-prefixes="#all">
            <response/>
        </xf:instance>
    </xf:model>
</xh:head>
<xh:body>
    <fr:view>
        <fr:body xmlns:xbl="http://www.w3.org/ns/xbl"
                 xmlns:oxf="http://www.orbeon.com/oxf/processors"
                 xmlns:p="http://www.orbeon.com/oxf/pipeline"
                 xmlns:dataModel="java:org.orbeon.oxf.fb.DataModel">
            <fr:section id="section-1-control" bind="section-1-bind">
                <xf:label ref="$form-resources/section-1/label"/>
                <fr:grid>
                    <xh:tr>
                        <xh:td>
                            <xf:select1 id="control-3-control" appearance="full" bind="control-3-bind">
                                <xf:label ref="$form-resources/control-3/label"/>
                                <xf:hint ref="$form-resources/control-3/hint"/>

                                <xf:alert ref="$fr-resources/detail/labels/alert"/>
                                <xf:itemset ref="$form-resources/control-3/item">
                                    <xf:label ref="label"/>
                                    <xf:value ref="value"/>
                                </xf:itemset>
                            </xf:select1>

                        </xh:td>

                    </xh:tr>
                    <xh:tr>
                        <xh:td>
                            <xf:input id="control-4-control" bind="control-4-bind">
                                <xf:label ref="$form-resources/control-4/label"/>
                                <xf:hint ref="$form-resources/control-4/hint"/>
                                <xf:alert ref="$fr-resources/detail/labels/alert"/>
                            </xf:input>
                        </xh:td>
                    </xh:tr>
                    <xh:tr>
                        <xh:td>
                            <xf:output id="control-5-control" bind="control-5-bind">
                                <xf:label ref="$form-resources/control-5/label"/>
                                <xf:hint ref="$form-resources/control-5/hint"/>
                                <xf:alert ref="$fr-resources/detail/labels/alert"/>                                
                            </xf:output>
                        </xh:td>
                    </xh:tr>
                </fr:grid>
            </fr:section>
        </fr:body>
    </fr:view>
</xh:body>

Wenn Sie in diesem Beispiel "Erste Wahl" auswählen, wird das Eingabefeld angezeigt. Und wenn Sie einen Wert eingeben, wird das Label "Visited" angezeigt. Dies ist das erwartete Verhalten. Wenn Sie das Optionsfeld später in "Zweite Wahl" ändern, wird das Eingabefeld ausgeblendet, die Bezeichnung "Besucht" bleibt jedoch sichtbar (wird nur ausgeblendet, wenn der Benutzer den Wert des Eingabefelds löscht, ist jetzt jedoch ausgeblendet). . Das ist unerwünscht. Gibt es eine Möglichkeit, dies zu vermeiden?

HINWEIS: Ich habe string-length () hinzugefügt, um sicherzustellen, dass es ausgeblendet wird, wenn der Wert entfernt wurde. Ohne ist immer sichtbar.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage