2011-03-09 58 views
0

我想實現一個嚮導,我正在使用CardLayout。該向導有3個屏幕和一些表單元素。所以,基本上我需要將表格分成3個屏幕,並且只有輸入的數據有效時,用戶才能從一個屏幕移動到另一個屏幕。使用CardLayout和FormPanels

問題是,我該如何表示形式?當用戶最終完成嚮導時,我將需要提交所有數據。我嘗試了這兩種方法:

  1. 在表單面板上使用卡片佈局。在這種情況下,表單元素不能正確呈現。

  2. 對卡片佈局面板中的每個屏幕使用表格面板。在這個可以呈現形式和UI功能是好的。但是,如何將三種形式的數據傳送到一種後置方法?

那麼,我該怎麼辦?想法和建議,請...

回答

1

選項1號是最好的解決方案,實際上我甚至不會考慮2號,因爲它不是很可擴展。

我假設通過「表單元素不能正確呈現」,您在每張卡片中都缺少表單佈局。

items: [{ 
    id: 'card-0', 
    layout: 'form', 
    items: [{ 
     //items here 
    }] 
},{ 
    //other cards 
}] 
+0

啊!是的:) ..這是我失蹤!沒有佈局:每張卡片中都有「表格」。謝謝! – 2011-03-09 12:39:17

0

考慮在CardLayout的每個項目有Ext.form.FormPanel選項,你可以阻止提交每個這樣的形式,並在最後一個附加一個偵聽「提交」按鈕遍歷項目在你的CardLayout面板中,通過調用BasicForm的getFieldValues()方法獲取所有表單值。

var formValues = {}; 

CardLayoutPanel.items.each(function(panel){ 
    if (panel.isXType('form')) { 
     Ext.apply(formValues, panel.getForm().getFieldValues()); 
    } 
}); 

// Now you can dispatch an ajax request with Ext.Ajax that sends the 
// formValues variable as parameters to your backend to process 
// all values from the three forms. 
+0

我的確想過這個..但是與使用單個FormPanel相比,它的冗長過程.. – 2011-03-09 12:40:31