【发布时间】:2012-03-26 12:51:35
【问题描述】:
我最初在 Sencha 论坛 here 上发布了这个,但没有得到任何回复(除了我自己的答案,我将很快发布),所以我将在这里重新发布,看看我是否能得到更多帮助.
我一直在思考如何在 4.0.7 中过滤 TreeStore。我尝试了以下方法:
模型
Ext.define('model', {
extend: 'Ext.data.Model',
fields: [
{name: 'text', type: 'string'},
{name: 'leaf', type: 'bool'},
{name: 'expanded', type: 'bool'},
{name: 'id', type: 'string'}
],
hasMany: {model: 'model', name: 'children'}
});
商店
Ext.define('myStore', {
extend: 'Ext.data.TreeStore',
model: 'model',
storeId: 'treestore',
root: {
text: 'root',
children: [{
text: 'leaf1',
id: 'leaf1',
children: [{
text: 'child1',
id: 'child1',
leaf: true
},{
text: 'child2',
id: 'child2',
leaf: true
}]
},{
text: 'leaf2',
id: 'leaf2',
leaf: true
}]
},
proxy: {
type: 'memory',
reader: {
type: 'json'
}
}
});
树
var myTree = Ext.create('Ext.tree.Panel', {
id: 'myTree',
selType: 'cellmodel',
selModel: Ext.create('Ext.selection.CellModel', {mode: 'MULTI'}),
rootVisible: false,
store: Ext.create('myStore'),
width: 300
});
过滤器
var filter = Ext.create('Ext.util.Filter', {
filterFn: function(item) {
return item.data.text == 'leaf1';
}
});
所以我认为我的问题是......我不知道如何使用这个过滤器,因为 TreeStore 实际上并没有像普通商店那样继承任何类型的过滤器功能。我试过了:
myTree.store.filters.add(filter);
myTree.store.filters.filter(filter); // This seems to work
// I can get into the filterFn when debugging, but I think item is the "this" of my filter object.
通常,如果我有一个网格并创建一个像上面这样的过滤器,我可以做 myTree.store.filter(filter) 它会抓取每一行的项目/过滤器我返回的内容......但我在想,因为 TreeStore 没有'不继承过滤函数,它没有被传入。
如果有人可以澄清我做错了什么,或者对如何设置过滤功能/我的思考过程有任何见解,请继续。如有任何帮助,我将不胜感激。
【问题讨论】:
-
有趣...在他们的文档中说 Treestore 具有过滤器属性,但没有提及任何过滤方法。您是否尝试在加载之前指定 filters[] 并设置 filterOnLoad: true?