2012-03-08 78 views

回答

3

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

例如筛选只有父节点:

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

}); 

有了这个overrride在你的代码,你可以创建一个“只有叶子”过滤器的功能或属性/值对按该Ext.util.Filter 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; 
    } 
}); 

然后,您可以只调用过滤功能时采取了叶子节点:

myTreeStore.filter(nodeFilter); 
+1

+1非常优雅。我打算建议在服务器端进行控制。 – dbrin 2012-03-08 19:55:35

0

TreeStores不会继承过滤(因为它们是抽象店),所以Geronimo的答案做不适合我。我希望这样做,因为这会让我的生活变得更加轻松。

无论如何,我有一个thread在Sencha论坛上提供了一个工作过滤解决方案。在我的例子中,过滤被filterBy函数调用,所以我相信你可以调整它以按照你的方式工作。

+0

你是对的,我只是从API做到的,但没有注意到缺少的功能。我添加了一个在4.1b2中正常工作的覆盖,我知道4.07和4.1之间有一些对treestore的更改,但它可能会作为一个更动态的树形过滤器覆盖。 – Geronimo 2012-03-09 23:12:40

相关问题