说实话Ext这个东西还是比较不爽,那个官方的api也太简单了,很多地方都寥寥几句话,搞的像我这样的初学者很泄气,不过做事最好还是有始有终,有点心得,记录一下。
所谓的常见的应用界面就是登录完毕之后,左边一个菜单面板,中间一个TabPanel来放具体功能
后台传回数据后,点左边菜单应该可以动态加载功能
1.登录完毕后,加载左菜单,这个没啥好说的,数据:
{
"success": true,
"children": [
{ "functionId": 1, "functionMappingName": "userinfopanel","functionDes":"用户管理","iconCls" :"feed-icon","leaf": true },
{ "functionId": 2, "functionMappingName": "roleinfopanel","functionDes":"角色管理","iconCls" :"feed-icon","leaf": true }
]
}
functionId : 功能id
functionDes : 功能描述
functionMappingName : 其实就是定义在view中的 xtype,方便加载
2.按部就班定义model和store
model:
Ext.define('PJ.model.FunctionModel',{
extend : 'Ext.data.Model',
fields : ['functionId','functionMappingName','functionDes']
});
store:
Ext.define('PJ.store.FunctionStore',{
extend : 'Ext.data.TreeStore',
model : 'PJ.model.FunctionModel',
autoLoad : true,
root : {
functionDes : '系统功能',
expanded : false
},
proxy : {
type : 'ajax',
url : 'json/Function.json',
reader: {
type: 'json',
successProperty: 'success'
}
}
});
3.点击左菜单,加载对应的功能,这里是UserInfoPanel,xtype就是functionMappingName中内容。
controller:
Ext.define('PJ.controller.MainController',{
extend : 'Ext.app.Controller',
views : ['MainWin','LeftWin','LeftWinFunctionTree','UserInfoPanel'],
stores: ['FunctionStore','UserInfo'],
models: ['FunctionModel','UserInfo'],
init : function(){
this.control({
'leftWinFunctionTree':{
itemclick : this.loadFunction
}
});
},
loadFunction : function(view,rec,item,index,eventObj){
var mainTab = Ext.getCmp('mainView');
//如果已有该id的tab,就激活它
//否则创建
var tab = mainTab.queryById('functionTab'+rec.get('functionId'));
if(tab){
mainTab.setActiveTab(tab);
}else{
tab = mainTab.add({
id: 'functionTab'+rec.get('functionId'),
title: rec.get('functionDes'),
closable: true,
xtype : rec.get('functionMappingName')
}).show();
};
}
});
xtype其实就是系统帮忙初始化了一个实例 ,所以可以直接引用,还是很方便的吧,不过就是必须在controller中声明对应的view,store,model等等一串,这个地方是不是也可以动态声明呢?
有图有真相: