2012-03-08 112 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

相關問題