Javascript 有没有办法只显示extjs树中的父节点
我只想在extjs中显示树的父节点。在我的数据存储中也有叶节点 输出应该是- Folder 1 Folder 1.1 Folder 2 Folder 3 文件夹1 文件夹1.1 文件夹2 文件夹3Javascript 有没有办法只显示extjs树中的父节点,javascript,html,tree,treeview,extjs4,Javascript,Html,Tree,Treeview,Extjs4,我只想在extjs中显示树的父节点。在我的数据存储中也有叶节点 输出应该是- Folder 1 Folder 1.1 Folder 2 Folder 3 文件夹1 文件夹1.1 文件夹2 文件夹3 创建仅获取父节点的筛选器对象,并将其添加到存储配置: var yourTreeStore = Ext.create('Ext.data.TreeStore', { // other configs ... filters: [nodeFilter] }); 例如,仅对父节点进行
创建仅获取父节点的筛选器对象,并将其添加到存储配置:
var yourTreeStore = Ext.create('Ext.data.TreeStore', {
// other configs ...
filters: [nodeFilter]
});
例如,仅对父节点进行筛选:
var nodeFilter = new Ext.util.Filter({
property: 'leaf',
value : false
});
将其放在treestore配置中:
var yourTreeStore = Ext.create('Ext.data.TreeStore', {
// other configs ...
filters: [nodeFilter]
});
编辑:
incutonez是对的,我根据API属性提交了,但没有注意到缺少的函数。不过,它们很容易覆盖,以便对树顶应用过滤。这在4.1b2中对我有效:
Ext.override(Ext.data.TreeStore, {
hasFilter: false,
filter: function(filters, value) {
if (Ext.isString(filters)) {
filters = {
property: filters,
value: value
};
}
var me = this,
decoded = me.decodeFilters(filters),
i = 0,
length = decoded.length;
for (; i < length; i++) {
me.filters.replace(decoded[i]);
}
Ext.Array.each(me.filters.items, function(filter) {
Ext.Object.each(me.tree.nodeHash, function(key, node) {
if (filter.filterFn) {
if (!filter.filterFn(node)) node.remove();
} else {
if (node.data[filter.property] != filter.value) node.remove();
}
});
});
me.hasFilter = true;
},
clearFilter: function() {
var me = this;
me.filters.clear();
me.hasFilter = false;
me.load();
},
isFiltered: function() {
return this.hasFilter;
}
});
然后,只要调用filter函数即可取出叶节点:
myTreeStore.filter(nodeFilter);
创建仅获取父节点的筛选器对象,并将其添加到存储配置:
var yourTreeStore = Ext.create('Ext.data.TreeStore', {
// other configs ...
filters: [nodeFilter]
});
例如,仅对父节点进行筛选:
var nodeFilter = new Ext.util.Filter({
property: 'leaf',
value : false
});
将其放在treestore配置中:
var yourTreeStore = Ext.create('Ext.data.TreeStore', {
// other configs ...
filters: [nodeFilter]
});
编辑:
incutonez是对的,我根据API属性提交了,但没有注意到缺少的函数。不过,它们很容易覆盖,以便对树顶应用过滤。这在4.1b2中对我有效:
Ext.override(Ext.data.TreeStore, {
hasFilter: false,
filter: function(filters, value) {
if (Ext.isString(filters)) {
filters = {
property: filters,
value: value
};
}
var me = this,
decoded = me.decodeFilters(filters),
i = 0,
length = decoded.length;
for (; i < length; i++) {
me.filters.replace(decoded[i]);
}
Ext.Array.each(me.filters.items, function(filter) {
Ext.Object.each(me.tree.nodeHash, function(key, node) {
if (filter.filterFn) {
if (!filter.filterFn(node)) node.remove();
} else {
if (node.data[filter.property] != filter.value) node.remove();
}
});
});
me.hasFilter = true;
},
clearFilter: function() {
var me = this;
me.filters.clear();
me.hasFilter = false;
me.load();
},
isFiltered: function() {
return this.hasFilter;
}
});
然后,只要调用filter函数即可取出叶节点:
myTreeStore.filter(nodeFilter);
树存储不继承过滤(因为它们是抽象存储),所以Geronimo的答案对我来说不起作用。我希望这样做,因为这样会让我的生活轻松很多
不管怎样,我在Sencha论坛上有一篇文章,提供了一个有效的过滤解决方案。在我的示例中,filterBy函数调用了过滤,因此我相信您可以调整它以按自己的方式工作。树存储不继承过滤(因为它们是抽象存储),因此Geronimo的答案对我不起作用。我希望这样做,因为这样会让我的生活轻松很多
不管怎样,我在Sencha论坛上有一篇文章,提供了一个有效的过滤解决方案。在我的示例中,filterBy函数调用了过滤功能,因此我相信您可以调整它,使其按自己的方式工作。+1非常优雅。我打算建议在服务器端控制它。+1非常优雅。我打算建议在服务器端控制它。你是对的,我只是从API做的,但没有注意到缺少的函数。我添加了一个在4.1b2中运行良好的覆盖,我知道在4.07和4.1之间对treestore进行了一些更改,但它可能会作为一个更动态的树过滤器覆盖来运行。你是对的,我只是从API中进行了操作,但没有注意到缺少的函数。我添加了一个在4.1b2中运行良好的覆盖,我知道在4.07和4.1之间对treestore进行了一些更改,但它可能作为一个更动态的树过滤器覆盖对您有效。