我只想在extjs中只顯示樹的父節點。在我的數據存儲中也有葉節點。有沒有辦法只顯示extjs樹中的父節點
輸出應該是這樣的 -
Folder 1 Folder 1.1 Folder 2 Folder 3
我只想在extjs中只顯示樹的父節點。在我的數據存儲中也有葉節點。有沒有辦法只顯示extjs樹中的父節點
輸出應該是這樣的 -
Folder 1 Folder 1.1 Folder 2 Folder 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非常優雅。我打算建議在服務器端進行控制。 – dbrin 2012-03-08 19:55:35