Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 有没有办法只显示extjs树中的父节点_Javascript_Html_Tree_Treeview_Extjs4 - Fatal编程技术网

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

Javascript 有没有办法只显示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] }); 例如,仅对父节点进行

我只想在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 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进行了一些更改,但它可能作为一个更动态的树过滤器覆盖对您有效。