Model view controller Extjs4如何更改treepanel中的存储
我在“app/store/”中有一些菜单树存储,例如“menu1.js”、“menu2.js”。 在我的网页中,我在顶部区域有一个导航栏,上面有许多按钮,用于控制左侧区域的菜单树以更改菜单。但我不知道如何更改此树面板中的存储。 这是我的密码: app/store/Menus1.jsModel view controller Extjs4如何更改treepanel中的存储,model-view-controller,menu,extjs4,treepanel,Model View Controller,Menu,Extjs4,Treepanel,我在“app/store/”中有一些菜单树存储,例如“menu1.js”、“menu2.js”。 在我的网页中,我在顶部区域有一个导航栏,上面有许多按钮,用于控制左侧区域的菜单树以更改菜单。但我不知道如何更改此树面板中的存储。 这是我的密码: app/store/Menus1.js Ext.define('Crm.store.Menus1'{ 扩展:“Ext.data.TreeStore”, 根目录:{ 对,, 儿童:[{ 文本:“subroot1”, 对,, 儿童:[ {id:'item01'
Ext.define('Crm.store.Menus1'{
扩展:“Ext.data.TreeStore”,
根目录:{
对,,
儿童:[{
文本:“subroot1”,
对,,
儿童:[
{id:'item01',text:'item1',leaf:true},
{id:'item02',text:'item2',leaf:true},
]
}, {
文字:“子轴2”,,
对,,
儿童:[
{id:'item03',text:'item3',leaf:true},
{id:'item04',text:'item4',leaf:true}
]
}]
}
});
app/store/Menus2.js
Ext.define('Crm.store.Menus2'{
扩展:“Ext.data.TreeStore”,
根目录:{
对,,
儿童:[{
文本:“subroot1”,
对,,
儿童:[
{id:'item05',text:'item5',leaf:true},
{id:'item06',text:'item6',leaf:true},
]
}, {
文字:“子轴2”,,
对,,
儿童:[
{id:'item07',text:'item7',leaf:true},
{id:'item08',text:'item8',leaf:true}
]
}]
}
});
app/view/MenuBar.js(即:我不设置其存储)
Ext.define('Crm.view.MenuBar'{
扩展:“Ext.panel.panel”,
别名:“widget.crm\u menubar”,
initComponent:function(){
Ext.apply(本{
id:“crm菜单栏”,
xtype:“面板”,
宽度:212,
frameHeader:false,
hideCollapseTool:没错,
斯普利特:是的,
可折叠的:是的,
collapseMode:'迷你',
项目:[
Ext.create('Ext.tree.Panel'{
id:'menutree',
边界:错,
边距:'5404',
身高:98%,
rootVisible:false,
}),
]
});
这是callParent();
}
});
app/controller/Navi.js
Ext.define('Crm.controller.Navi'{
扩展:“Ext.app.Controller”,
需要:['Crm.store.Menus1','Crm.store.Menus2'],
门店:['Menus1','Menus2'],
参考文献:[
{ref:'crm_naviationBar',选择器:'crm_naviationBar'},
{ref:'crm_menubar',选择器:'crm_menubar'}
],
init:function(){
var menutree=Ext.getCmp('menutree');
var menustore=menutree.getStore();
menustore=Menus1;//我想用Menus1初始化菜单的存储
//menustore=Ext.create('Crm.store.Menus1');
这是我的控制({
“按钮”:{
单击:this.com单击,
范围:本
}
});
},
onItemClicked:函数(btn、eventObj){
var menustore=Ext.getCmp('menutree').getStore();
var btnId=btn.getId();
如果(btnId=='btn_menus1'){//单击按钮1时,将菜单更改为菜单1
menustore=Menus1;
//menustore=Ext.create('Crm.store.Menus1');
}否则,如果(btnId=='btn_menus2'){//单击按钮2时,将菜单更改为菜单2
menustore=Menus2;
//menustore=Ext.create('Crm.store.Menus1');
}
}
});
在获得店铺后,您应该能够在树面板上使用重新配置()
方法。这与更改网格存储的过程相同
var-store=Ext.getStore('newStore');
var menutree=Ext.getCmp('menutree');
菜单项。重新配置(存储);
此处有完整文档:
注意:文档中有一条评论指出此方法不起作用,但它没有指定ExtJS的版本。您可能需要等待框架的更新版本,然后才能按文档所述运行。不幸的是,Sencha已经忽略了这个bug很多很多个月了:(
请查看此线程: 根据最新的4.1文档,
reconfigure()
已从Ext.tree.Panel
中删除
注意:然而,奇怪的是,调用reconfigure()
不会给出错误,这意味着该方法仍然存在,但我无法让它正常工作,因为它返回另一个错误
另请参见4.0评论中的讨论:
我扩展了默认的treestore并编写了如下setStore()方法。不要假装这是最好的解决方案,但它正确地适用于ExtJS 4.1.1。我相信不需要太多更改即可支持其他版本
setStore: function(store) {
var me=this,
view;
view = me.getView();
me.removeManagedListener('beforeload');
me.removeManagedListener('load');
me.store.clearListeners();
me.store.clearManagedListeners();
me.store = store;
if (Ext.isString(me.store)) {
me.store = Ext.StoreMgr.lookup(me.store);
} else if (!me.store || Ext.isObject(me.store) && !me.store.isStore) {
me.store = new Ext.data.TreeStore(Ext.apply({}, me.store || {}, {
root: me.root,
fields: me.fields,
model: me.model,
folderSort: me.folderSort
}));
} else if (me.root) {
me.store = Ext.data.StoreManager.lookup(me.store);
me.store.setRootNode(me.root);
if (me.folderSort !== undefined) {
me.store.folderSort = me.folderSort;
me.store.sort();
}
}
view.store.treeStore = me.store;
view.setRootNode(me.store.getRootNode());
me.mon(me.store, {
scope: me,
rootchange: me.onRootChange,
clear: me.onClear
});
me.relayEvents(me.store, [
/**
* @event beforeload
* @inheritdoc Ext.data.TreeStore#beforeload
*/
'beforeload',
/**
* @event load
* @inheritdoc Ext.data.TreeStore#load
*/
'load'
]);
me.mon(me.store, {
/**
* @event itemappend
* @inheritdoc Ext.data.TreeStore#append
*/
append: me.createRelayer('itemappend'),
/**
* @event itemremove
* @inheritdoc Ext.data.TreeStore#remove
*/
remove: me.createRelayer('itemremove'),
/**
* @event itemmove
* @inheritdoc Ext.data.TreeStore#move
*/
move: me.createRelayer('itemmove', [0, 4]),
/**
* @event iteminsert
* @inheritdoc Ext.data.TreeStore#insert
*/
insert: me.createRelayer('iteminsert'),
/**
* @event beforeitemappend
* @inheritdoc Ext.data.TreeStore#beforeappend
*/
beforeappend: me.createRelayer('beforeitemappend'),
/**
* @event beforeitemremove
* @inheritdoc Ext.data.TreeStore#beforeremove
*/
beforeremove: me.createRelayer('beforeitemremove'),
/**
* @event beforeitemmove
* @inheritdoc Ext.data.TreeStore#beforemove
*/
beforemove: me.createRelayer('beforeitemmove'),
/**
* @event beforeiteminsert
* @inheritdoc Ext.data.TreeStore#beforeinsert
*/
beforeinsert: me.createRelayer('beforeiteminsert'),
/**
* @event itemexpand
* @inheritdoc Ext.data.TreeStore#expand
*/
expand: me.createRelayer('itemexpand', [0, 1]),
/**
* @event itemcollapse
* @inheritdoc Ext.data.TreeStore#collapse
*/
collapse: me.createRelayer('itemcollapse', [0, 1]),
/**
* @event beforeitemexpand
* @inheritdoc Ext.data.TreeStore#beforeexpand
*/
beforeexpand: me.createRelayer('beforeitemexpand', [0, 1]),
/**
* @event beforeitemcollapse
* @inheritdoc Ext.data.TreeStore#beforecollapse
*/
beforecollapse: me.createRelayer('beforeitemcollapse', [0, 1])
});
// If the root is not visible and there is no rootnode defined, then just lets load the store
if (!view.rootVisible && !me.getRootNode()) {
me.setRootNode({
expanded: true
});
}
}