5

私がこれをきちんと求めていないならば、私は前もって謝罪します..私が求めていることを言葉にするのは難しいです..

私は次のようなXFormsモデルを持っています:

<file>
    <criteria>
        <criterion></criterion>
    </criteria>
</file>

新しい基準タグを作成する複数の入力テキストボックスが必要です。

次のようなユーザーインターフェイス:

<xf:input ref="/file/criteria/criterion" model="select_data">
    <xf:label>Select</xf:label>
</xf:input>

<xf:input ref="/file/criteria/criterion" model="select_data">
    <xf:label>Select</xf:label>
</xf:input>

<xf:input ref="/file/criteria/criterion" model="select_data">
    <xf:label>Select</xf:label>
</xf:input>

そして、XML出力を次のようにしたいと思います(ユーザーが情報を入力した後):

<file>
    <criteria>
        <criterion>AAA</criterion>
        <criterion>BBB</criterion>
        <criterion>CCC</criterion>
    </criteria>
</file>

3つの入力フィールドがすべて同じ基準タグを参照していることがわかるため、私が持っている方法は機能しません。どうすれば区別できますか?

ありがとう!それが理にかなっていることを願っています!

最初の編集を開始

基本的なテキストボックスへの回答をありがとう!

ただし、リストボックスを使用してこれを行う必要があります。しかし、私の一生の間、私はその方法を理解することができません。xforms:selectイベントとdeselectイベントで使用する場所を読みましたが、どこに配置するかわかりませんでした。試した場所では、非常に奇妙な動作が発生しました。

私は現在、以下を実装しています。

<xf:select ref="instance('criteria_data')/criteria/criterion" selection="" appearance="compact" >  
        <xf:label>Choose criteria</xf:label>
        <xf:itemset nodeset="instance('criteria_choices')/choice">
            <xf:label ref="@label"></xf:label>
            <xf:value ref="."></xf:value>
        </xf:itemset>
    </xf:select>

ただし、複数の選択肢が送信されると、すべての選択値がスペースで区切られて同じノードに挿入されます。

例えば:

リストボックスからAAA、BBB、FFFを選択すると、次のXMLになります。

<criterion>AAA BBB FFF</criterion>

各選択が別々のノードにあるようにコードを変更するにはどうすればよいですか?

つまり、私はそれを次のように見せたいです:

<criterion>AAA</criterion>
<criterion>BBB</criterion>
<criterion>FFF</criterion>

ありがとう!

最初の編集を終了

2番目の編集を開始します:

リストボックス(つまり、xf:selectappearance = "compact")の場合、同じノードでスペースを使用できるようにしてから、xslを使用してそのxmlを変換し、適切にフォーマットされた新しいxmlドキュメント(個別のノードを含む)を生成しました。残念ながら、元々別々のノードに挿入しても、それほど面倒な解決策は見つかりませんでした。

ただし、選択した回答はテキストボックスで非常にうまく機能するため、回答として選択したのはなぜですか。

2回目の編集を終了

4

1 に答える 1

2

3つの基準で十分な場合は、角かっこで囲んだインデックスを使用する必要があります。

<xf:input ref="/file/criteria/criterion[1]" model="select_data"> 
    <xf:label>Select</xf:label> 
</xf:input>

<xf:input ref="/file/criteria/criterion[2]" model="select_data"> 
    <xf:label>Select</xf:label> 
</xf:input>

<xf:input ref="/file/criteria/criterion[3]" model="select_data"> 
    <xf:label>Select</xf:label> 
</xf:input>

ただし、代わりにxf:repeatを使用する場合は、必要な数の基準を追加できます。

<xf:group ref="/file/criteria" mode="select_data">
    <xf:repeat nodeset="criterion">
        <xf:input ref="."> 
            <xf:label>Select</xf:label> 
        </xf:input>
    </xf:repeat>
    <xf:trigger>
        <xf:label>Insert new row</xf:label>
        <xf:insert nodeset="criterion" position="after" at="last()" ev:event="DOMActivate"/>
    </xf:trigger>
    <xf:trigger>
        <xf:label>Delete last row</xf:label>
        <xf:delete nodeset="criterion" at="last()" ev:event="DOMActivate" />
    </xf:trigger>
</xf:group>

注意:この繰り返しの例では、テーブルの最後の行を削除できず、新しい行を挿入したときに重複する最後の行を非表示にできないように、ある程度の調整が必要です。その他の例については、 http://en.wikibooks.org/wiki/XForms#Tabular_and_Repeating_Dataを参照してください。

于 2010-05-25T19:52:13.973 に答える