標籤:extjs5 sencha 開發經驗
跟我一起學extjs5(25--模組Form的自訂的設計[3]) 自訂的Form已經可以運行了,下面改一下配置,把Form裡面的FieldSet放在Tab之下。修改一下ModuleModel.js中的data下的tf_FormSchemes下的方案,增加一個屬性。
上面設定好了以後,可以看到Form中FieldSet都放置在Tab中了,下面的展示了二個Tab的介面。
從理論上說,如果你的Form配置資訊設定得合理,可以得到你想要的任何樣式的Form。但在實際應用的時候,我們只要完成大部分能自動產生就足夠了,真正程式中有超級變態複雜的Form結構,可以自己編指令碼產生。上面的代碼和樣本只是展示了如何自訂一個Form,要能夠真正的適用還得做很多工作,對於初學者或者經驗還不是很豐富的程式員來說,這把這個當成一個拓展視野的例子看看就行了。
上面是一個編輯的視窗,資料編輯了以後要儲存回model中,這個儲存沒有用到MVVM特性,我直接寫在BaseForm.js中的按鈕控制項裡了。
this.buttons.push({text : '儲存',itemId : 'save',glyph : 0xf0c7,handler : function(button){button.up('form').getForm().updateRecord();}},{text : '關閉',itemId : 'close',glyph : 0xf148,handler : function(button){button.up('window').hide();}});
一個Form在用loadRecord(model)函數從model中調用資料後,可以用getRecord()來返回model,在資料修改了以後可以直接用updateRecord()來用form中的值更新到model中。 在儲存的handler中執行了這條語句:button.up(‘form‘).getForm().updateRecord();給初學者講一下,button.up(‘form‘),就是從這個button的第一個父容器開始一直往上遞迴,直到找到form為止,這是一個非常好的根據控制項找到另一個控制項的辦法,建立大家都用這種方法來尋找控制項,不要用getCmp(id) 的這種直接尋找的方式。與up對應的還有一個down方法,是尋找本控制項的子控制項的函數。上例中加入了這個方法之後,就可以儲存資料了。