關于一個ext4MVC的例子,代碼中有相關注釋;
詳細見附件(是一個myEclipse項目)
本人在使用中的感受:
如果我們這樣分層了,有利于元件重用,軟體開發和維護,但學習成本很高,要新人接受需要一段時間,在開發中要按照一定規範.
建議不要随便使用這樣分層!
每一層的介紹:
1,model和store其實就是管資料的,
2,view層,純界面,極少邏輯代碼,邏輯代碼都寫到controller中,這樣好管理.
3,controller,建議邏輯代碼都寫到這裡,這樣好管理.
關于檔案夾名稱:
注意檔案夾起名controller/model/store/view檔案夾名稱一定的,
這樣每個相應的類名也可以根據這個來取,如:"keel.view.goods.GoodsListView"
keel是整個應用程式的命名空間,view就是view檔案夾,goods.GoodsListView就是view檔案夾下的goods檔案夾的
GoodsListView.js檔案;
這樣程式就可以用動态加載功能了;
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZwpmLjJDN1UTN0UGZjZmNtEWYmJWLwYGOz0SMlJmNtUWO2UmMwAjZvwFOxgDM2UzLcRnbl1GajFGd0F2LcRWYvxGc19CXt92YuUWelRXauwGZvw1LcpDc0RHaiojIsJye.jpg)
controller介紹:
其實我們很大一部分工作就在controller了,例子代碼如下:
/*
商品控制層,
所有邏輯代碼都在這裡寫
*/
Ext.define('keel.controller.GoodsCtrl', {
extend: 'Ext.app.Controller',
stores: ['GoodsStore'],//聲明該控制層要用到的store
models: ['GoodsModel'],//聲明該控制層要用到的model
views: ['goods.GoodsListView','goods.GoodsWinView'],//聲明該控制層要用到的view
refs: [//相當于一個映射,這樣就可以在控制層友善的通過geter取得相應的對象了
{
ref: 'goodslistview',
selector: 'goodslistview'
},
{
ref: 'goodswinview',
selector: 'goodswinview'
}
],
init: function() {
this.control({//這裡的this相當于這個控制層
'viewport > goodslistview': {
afterrender: function(gp){//偵聽goodslistview渲染
gp.down('button[action=testBtn1]').on('click',function(){
//偵聽goodslistview工具條上action=testBtn1的按鈕單擊事件
this.showWin();
},this);
gp.down('button[action=testBtn2]').on('click',function(){
//偵聽goodslistview工具條上action=testBtn2的按鈕單擊事件
alert(this.getGoodslistview().title)
},this);
}
},
'goodswinview button[action=ok]': {
//偵聽goodswinview中action=ok的按鈕單擊事件
click: function(){
this.getGoodswinview().setTitle(Ext.util.Format.date(new Date(),'Y-m-d H:i:s'));
}
}
});
},
showWin : function(){
Ext.create('keel.view.goods.GoodsWinView').show();
}
});