2010-05-25 19 views
5

我的道歉提前如果我不問這個很正確..它是難以言喻什麼,我問..XForms和爲同一型號標記多個輸入

我有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個輸入字段都指向相同的標準標籤。我如何區分?

謝謝!我希望這是有道理的!

初開始編輯

感謝的基本文本框的答覆!

但是,我現在需要用listbox來做到這一點。但對於我的生活,我無法弄清楚如何。我在某處閱讀xforms:select和deselect events ..但我不知道將它們放在哪裏,我嘗試的地方給了我非常奇怪的行爲。

我目前正在執行以下事項:

<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> 

謝謝!

END第一編輯

BEGIN SECOND編輯:

對於列表框(即XF:選擇外觀= 「緊湊」) 我結束了允許的空間在同一節點中發生然後使用xsl轉換該xml以生成格式正確的新xml文檔(具有單獨的單獨節點)。不幸的是,我沒有找到一個不太麻煩的解決方案,將它們原本插入單獨的節點。

但是,所選答案對於文本框非常適用,因此我選擇它作爲答案。

END第二個編輯

回答

2

如果三個標準都夠你,那麼你應該在括號中使用索引:

<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:重複相反,你可以添加任意多您需要的標準:

<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

+0

謝謝!這對我的文本框非常有效。 我假設我可以做一些類似的組合框然後呢? (即從組合框中選擇多個事物,並將它們變爲新的標準)。 – developer 2010-05-25 20:24:10

+0

@iHeartGreek,是的。你可以在''裏面找到任何你想要的東西。 – avernet 2010-05-25 21:33:06

+0

我試過這個解決方案使用列表框(使用xforms:select),但我無法弄清楚。我還讀到,我應該使用xforms:select和deselect事件,但我只是有奇怪的行爲。 (看我上面的編輯我的新問題的更多上下文) – developer 2010-05-27 19:58:21