2014-11-03 34 views
0

我使用XForms的XSLTForms實現構建了一個嚮導,並且遇到了多步表單的問題。當我在form1中完成數據並導航到form2時,form1中輸入的所有數據都消失。爲了導航,我使用觸發器在XSLTForms嚮導中保留值(多步表單)

<xf:trigger> 
    <xf:label>Next</xf:label> 
    <xf:action ev:event="DOMActivate"> 
     <xf:load show="replace"> 
      <xf:resource value="form2.xml"/> 
     </xf:load> 
    </xf:action> 
</xf:trigger> 

我想這個問題是我沒有保存模型,所以我增加了一個提交給我的模型:

<xf:submission id="saveData" resource="data.xml" ref="instance('person')" method="put" validate="false" relevant="false" replace="none" /> 

所以我取代了「下一頁「觸發了提交:

<xf:submit submission="saveData"> 
    <xf:label>Next</xf:label> 
    <xf:action ev:event="DOMActivate"> 
     <xf:load show="replace"> 
      <xf:resource value="form2.xml"/> 
     </xf:load> 
    </xf:action> 
</xf:submit> 

但仍然有一個問題:導航詢問用戶是否允許寫入文件,我真的想這樣做,在年底,而不是在每一個形式。

除此之外還有其他的選擇嗎?非常感謝!

這裏更好地瞭解一個例子:

<xf:instance xmlns=""> 
    <person> 
     <name/>      <!--Form 01--> 
     <surname/>     <!--Form 01--> 
     <height/>     <!--Form 01--> 
     <weight/>     <!--Form 01--> 
     <children> 
      <age/>     <!--Form 02--> 
      <school-name/>   <!--Form 02--> 
     </children> 
     <has-car/>     <!--Form 03--> 
     <wanna-share-car/>   <!--Form 03--> 
    </person> 
</xf:instance> 

回答

1

的XForms可用於設計一個單頁的應用程序。

隨着XForms 1.1,所有的應用程序被寫入一個單一的形式。案例可以用來逐步顯示控件。相關的MIP也可以用於此目的。

XForms實現,比如betterForm和XSLTForms,增加了一個子表單機制,允許部分表單被加載/卸載。不幸的是,這並沒有包含在XForms 2.0提出的建議中,所以這是一個非標準的機制。

XSLTForms中的窗體非常通用:它們可以共享相同的模型和實例,也可以擁有它們的所有權。 XSLTForms不需要特定的操作或功能。

--Alain

+0

嗨,阿蘭!您在XSLTForms中所做的是我真正需要的。他們對XForms沒有考慮是一種恥辱。問題是,當我使用我的文章中提到的第一個方法(只是一個具有負載的觸發器)時,我完成了form1,導航到form2,然後從JS訪問模型,但它返回的模型沒有先前輸入的值。我正在訪問這個: var model = window.document.getElementById(「model1」); var inst = model.getInstanceDocument(「person」); var sXML = new XMLSerializer()。serializeToString(inst); console.log(sXML); – gal007 2014-11-04 12:36:23

+0

即使我剛完成form2數據並再次導航到form1(帶有加載操作的另一個觸發器),表單也是空的,並且以前輸入的信息將丟失。 – gal007 2014-11-04 12:38:38

+0

我正在使用相同的文件作爲實例數據,就像這樣: gal007 2014-11-04 12:39:41