我使用一个没有代理的简单TreeStore来构建我的菜单。这是一个简单的例子:
商品
Ext.define('LT.store.MnuApplication', {
extend: 'Ext.data.TreeStore',
root: {
expanded: true,
children: [{
text: "Lists",
expanded: true,
children: [{
text: "Countries",
leaf: true,
}]
}]
}
});
在控制器中我已经为“点击”事件添加了一个监听器:
控制器:
init: function() {
this.control({
/**
* Catch the treepanels in the menu accordion
*/
'menu-main treepanel': {
itemclick: function (view, record, item, index, event){
var clickedMnuNode = record;
var tabPanel = this.getTabPanel();
// Open tab only if the menu node is a leaf node
if (clickedMnuNode.isLeaf()) {
tabPanel.add({
xtype: clickedMnuNode.raw.loadTabComponent
}).show();
}
}
}
});
this.callParent();
}
现在我对这个解决方案的问题是:我想在TreeStore中定义哪些操作应由控制器完成 - 尤其应该加载哪个组件。
例如,我希望TreeStore看起来像这样:
Ext.define('LT.store.MnuApplication', {
extend: 'Ext.data.TreeStore',
root: {
expanded: true,
children: [{
text: "Lists",
expanded: true,
children: [{
text: "Countries",
leaf: true,
loadComponent: 'country-list',
loadTarget: 'tabPanel'
}]
}]
}
});
如您所见,我已向Tree Leaf添加了两个新参数。现在,我可以通过记录的“RAW”方法访问这些数据集。但这不是一个很好的解决方案 - 不是吗?
所以有人对我有所了解,如何将我的TreeStore中的其他参数(如“loadComponent”或“loadTaget”)传递给控制器?
提前致谢&干杯, 迈克尔
答案 0 :(得分:0)
过去我使用自定义参数创建了类似的树,并且我为TreeStore使用了自定义模型。因为默认情况下您的节点只具有NodeInterface的属性。像这样:
Ext.define('TreeConfig.model.Config', {
extend: 'Ext.data.Model',
fields: ['properties', 'id', 'text', 'guid'],
proxy: {
type: 'ajax',
url: rootConfigURL,
actionMethods: 'POST',
reader: {
type: 'json'
}
}
});
Ext.define('TreeConfig.store.CurrentConfig', {
extend: 'Ext.data.TreeStore',
model: 'TreeConfig.model.Config',
requires: 'TreeConfig.model.Config',
root: {
text: 'Config root',
expanded: true,
properties: []
}
});