我在将选定数据从树状图面板绑定到网格面板时遇到了一些问题。
当我选择树中的叶子节点时,我希望它的子节点加载到下面的绑定网格中。
我的解决方案是立即加载整个商店,然后使用内置功能过滤结果,但我还没有产生想要的结果。其中一个过滤器正在生成我想要的东西,但这是唯一的(检查JSFiddle链接) - 并且不会抛出任何错误。
我在JSFiddle创建了一个演示:http://jsfiddle.net/E3LPa/
我认为问题出在这个控制器中:
Ext.define('Exxica.controller.CalculationSidebar', {
extend: 'Ext.app.Controller',
models: [
'ResourceGroup',
'ResourceItem'],
stores: [
'ResourceGroups',
'ResourceItems'],
views: [
'ResourceItemsGrid',
'Debug'],
onTeCalculation_RightSidebar_TabPanel_ResourceGroupsSelect: function (model, selected, eOpts) {
var store = this.getStore("ResourceItems");
var item = selected[0];
if (item.get('leaf')) {
if (this.setFilter(item.get('id'), store)) store.reload();
}
},
setFilter: function (f, s) {
var fId = parseInt(f, 10);
console.log(s);
if (fId !== 0) {
s.clearFilter();
s.filter('group_id', fId);
return true;
} else {
return false;
}
},
init: function (application) {
this.control({
"#teCalculation_RightSidebar_TabPanel_ResourceGroups": {
selectionchange: this.onTeCalculation_RightSidebar_TabPanel_ResourceGroupsSelect
}
});
}
});
如果有人能帮助我弄清楚我做错了什么,那将非常感激。
答案 0 :(得分:1)
你的侧边栏类不必要地重新加载商店,这可能搞砸了,试试这个代码有各种修复来解决这个问题:
Ext.define('Exxica.controller.CalculationSidebar', {
extend: 'Ext.app.Controller',
models: [
'ResourceGroup',
'ResourceItem'],
stores: [
'ResourceGroups',
'ResourceItems'],
views: [
'ResourceItemsGrid',
'Debug'],
loaded: false,
onTeCalculation_RightSidebar_TabPanel_ResourceGroupsSelect: function (model, selected, eOpts) {
var store = this.getStore("ResourceItems");
var item = selected[0];
if(!this.loaded)
{
store.load();
this.loaded = true;
}
if (item.get('leaf')) {
this.setFilter(item.get('id'), store);
}
else
{
this.setFilter(-1, store);
}
},
setFilter: function (f, s) {
var fId = parseInt(f, 10);
console.log(s);
if (fId !== 0) {
s.clearFilter();
s.filter('group_id', fId);
return true;
} else {
return false;
}
},
init: function (application) {
this.control({
"#teCalculation_RightSidebar_TabPanel_ResourceGroups": {
selectionchange: this.onTeCalculation_RightSidebar_TabPanel_ResourceGroupsSelect
}
});
}
});