有没有办法只在extjs树中显示父节点

Is there a way to only show parent nodes in a extjs tree

本文关键字:显示 父节点 extjs 有没有      更新时间:2023-09-26

我想在extjs中只显示树的父节点。在我的数据存储中也有叶节点。

输出应该像-

文件夹1文件夹1.1文件夹2文件夹3

创建一个只获取父节点的过滤器对象,并将其添加到存储配置中:

例如,仅用于父节点的过滤器:

var nodeFilter = new Ext.util.Filter({
    property: 'leaf',
    value   : false
});

把它放在树存储配置:

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;
    }
});

通过代码中的这种覆盖,您可以根据Ext.util.Filterneneneba API:将"仅叶"过滤器创建为函数或属性/值对

// leaf only filter as a property/value pair
var nodeFilter = new Ext.util.Filter({
    property: 'leaf',
    value   : false
});
// leaf only filter as a function
var nodeFilter = Ext.create('Ext.util.Filter', {
  filterFn: function(item) {
    return !item.data.leaf;
  }
});

然后,只要去掉叶节点,就可以调用filter函数:

myTreeStore.filter(nodeFilter);

TreeStore不继承过滤(因为它们是抽象存储),所以Geronimo的答案对我不起作用。我希望它能起作用,因为它会让我的生活轻松很多。

无论如何,我在Sencha论坛上有一个线程,它提供了工作过滤解决方案。在我的例子中,过滤是由filterBy函数调用的,所以我相信你可以调整它来实现你的方式。