ExtJS 6 - 更新代理存储并保持当前网格状态
ExtJS 6 - Update proxy store and keep the current grid state
我有一个绑定到代理存储的树状网格,它需要通过每 X 秒调用一次网络服务来保持更新。这家商店有 N 条记录,我需要更新所有记录(例如这条记录是任务执行,我需要更新进度)。
我怎样才能 "reload" 这个网格而不丢失展开的分支? store 好像被刷新和重新填充了,如果 store 足够智能,可以添加新记录并更新以前的记录,那会很好,可以吗?
我想我遇到了同样的问题。我通过在重新加载商店时发送一个附加参数来解决它,该参数告诉后端当前扩展了哪些节点。然后我在响应中包含了扩展节点的数据,因为我只需要重新加载扩展节点(未扩展的节点是不可见的,将在扩展时加载)。
因此,在您的情况下,您可以将事件处理程序附加到商店 "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();
}
}
}
}
});
如果你愿意,我稍后可以写一个片段。
我有一个绑定到代理存储的树状网格,它需要通过每 X 秒调用一次网络服务来保持更新。这家商店有 N 条记录,我需要更新所有记录(例如这条记录是任务执行,我需要更新进度)。
我怎样才能 "reload" 这个网格而不丢失展开的分支? store 好像被刷新和重新填充了,如果 store 足够智能,可以添加新记录并更新以前的记录,那会很好,可以吗?
我想我遇到了同样的问题。我通过在重新加载商店时发送一个附加参数来解决它,该参数告诉后端当前扩展了哪些节点。然后我在响应中包含了扩展节点的数据,因为我只需要重新加载扩展节点(未扩展的节点是不可见的,将在扩展时加载)。
因此,在您的情况下,您可以将事件处理程序附加到商店 "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();
}
}
}
}
});
如果你愿意,我稍后可以写一个片段。