ExtJS 6 - 更新代理存储并保持当前网格状态

时间:2016-03-31 11:34:05

标签: extjs extjs6

我有一个绑定到代理商店的树形网格,需要通过每X秒调用一次web服务来保持更新。这个商店有N条记录,我需要更新它们(例如这些记录是任务执行,我需要更新进度)。

我怎样才能重新加载"这个网格没有松动扩展的分支?这似乎就像商店被刷新和重新填充一样,如果商店足够智能,可以添加新记录并更新以前的记录,这样会好吗?

1 个答案:

答案 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();
                            }
                        }
                    }   
                }
        });

如果你愿意,我可以稍后写一个片段。