我有一个绑定到代理商店的树形网格,需要通过每X秒调用一次web服务来保持更新。这个商店有N条记录,我需要更新它们(例如这些记录是任务执行,我需要更新进度)。
我怎样才能重新加载"这个网格没有松动扩展的分支?这似乎就像商店被刷新和重新填充一样,如果商店足够智能,可以添加新记录并更新以前的记录,这样会好吗?
答案 0 :(得分:3)
我想我遇到了同样的问题。我在重新加载商店时通过发送附加参数解决了这个问题,该商店告诉后端当前扩展了哪个节点。然后我在响应中包含了扩展节点的数据,因为我只需要重新加载扩展节点(未展开的节点不可见,将在展开时加载)。
因此,在您的情况下,您可以将事件处理程序附加到商店" beforeload"将有关扩展节点的信息附加到请求的事件。然后在加载事件时展开已扩展的节点。
所以,在加载保存节点之前:
store.on("beforeload", function(store, operation) {
var root = store.getRoot(),
saveExpandedNodesIds = function(node) {
if (node.childNodes) {
Ext.Array.each(node.childNodes, function(rec){
if (rec.get('expanded')) {
// save to tree object
tree.expandedNodes[]= rec.get('id');
saveExpandedNodesIds(rec);
}
});
}
}
saveExpandedNodesIds(root);
});
在加载时恢复展开状态
store.on("load", function() {
fn: function(store) {
/**
* If tree has expanded nodes, expand them after load
*/
if(tree.expandedNodes > 0) {
while(tree.expandedNodes.length > 0) {
var item = tree.expandedNodes.shift();
if (store.getById(item) !== null) {
store.getById(item).expand();
}
}
}
}
});
如果你愿意,我可以稍后写一个片段。