ExtJS 6.2 从商店更新 TreeGrid 数据而不从服务器重新加载
ExtJS 6.2 Update TreeGrid data from store without reloading from server
我有两个共享同一个商店的树形网格。当我将一个项目从一个项目拖到另一个项目时,所有正确的更新似乎都发生了(记录从左树上的位置消失,右树上的位置,左树现在也显示新的位置)。
但是,如果我尝试将同一条记录拖回到它的原始位置,它的父记录似乎从未更新说它离开了。
这里是我检查是否可以丢弃物品的地方:
listeners: {
nodedragover: function(targetNode, position, dragData, e, eOpts) {
console.log("Trying to drop");
var ruleStore = this.getStore('rules');
// Ensure leaf is adding as a leaf
if (position === 'before') {
return false;
}
// Check first that the target is a pool and not a leaf
if (targetNode.data.leaf) {
console.log("A leaf! Can't drop here")
return false;
} else {
console.log("A node! Drop it like it's hot");
}
var allowDrop = true;
var dropMessage = [];
var records = dragData.records;
var targetPool = targetNode.data;
console.log("Dragdata: ", dragData);
console.log("targetPool: ", targetPool);
console.log("Store: ", Ext.getStore('Pools'));
// Check platform, sample names, indicies
for (var i = 0; i < records.length; i++) {
var rec = records[i].data;
if (rec.platform !== targetPool.platform) {
allowDrop = false;
dropMessage.push("Sample platform does not match target pool platform");
break;
} else if (targetPool.children.map(
function(child){ return child.sample_name;}).indexOf(rec.sample_name) > -1) {
allowDrop = false;
dropMessage.push("Sample is already in this pool");
break;
} else if (targetPool.children.map(
function(child){ return child.sample_index;}).indexOf(rec.sample_index) > -1) {
allowDrop = false;
dropMessage.push("Sample index is already in this pool");
break;
}
}
console.log(dropMessage);
return allowDrop;
},
当我使用 Ext.getStore('Pools') 获取商店时,它反映该项目已从其旧父项中删除,现在位于新父项中。但是,来自 nodedragover 事件的 targetNode 仍然具有旧状态。
如何获得树视图来反映商店,而不是从服务器重新加载商店(这应该全部在客户端完成)?
我觉得我在这里缺少一些基本概念。
您可以使用
treeView.refresh();
或
treeView.refreshNode(recordModified);
因为树视图是从 view.table 扩展而来的
这里是文档 http://docs.sencha.com/extjs/6.0.2/classic/Ext.view.Table.html#method-refresh
我有两个共享同一个商店的树形网格。当我将一个项目从一个项目拖到另一个项目时,所有正确的更新似乎都发生了(记录从左树上的位置消失,右树上的位置,左树现在也显示新的位置)。
但是,如果我尝试将同一条记录拖回到它的原始位置,它的父记录似乎从未更新说它离开了。
这里是我检查是否可以丢弃物品的地方:
listeners: {
nodedragover: function(targetNode, position, dragData, e, eOpts) {
console.log("Trying to drop");
var ruleStore = this.getStore('rules');
// Ensure leaf is adding as a leaf
if (position === 'before') {
return false;
}
// Check first that the target is a pool and not a leaf
if (targetNode.data.leaf) {
console.log("A leaf! Can't drop here")
return false;
} else {
console.log("A node! Drop it like it's hot");
}
var allowDrop = true;
var dropMessage = [];
var records = dragData.records;
var targetPool = targetNode.data;
console.log("Dragdata: ", dragData);
console.log("targetPool: ", targetPool);
console.log("Store: ", Ext.getStore('Pools'));
// Check platform, sample names, indicies
for (var i = 0; i < records.length; i++) {
var rec = records[i].data;
if (rec.platform !== targetPool.platform) {
allowDrop = false;
dropMessage.push("Sample platform does not match target pool platform");
break;
} else if (targetPool.children.map(
function(child){ return child.sample_name;}).indexOf(rec.sample_name) > -1) {
allowDrop = false;
dropMessage.push("Sample is already in this pool");
break;
} else if (targetPool.children.map(
function(child){ return child.sample_index;}).indexOf(rec.sample_index) > -1) {
allowDrop = false;
dropMessage.push("Sample index is already in this pool");
break;
}
}
console.log(dropMessage);
return allowDrop;
},
当我使用 Ext.getStore('Pools') 获取商店时,它反映该项目已从其旧父项中删除,现在位于新父项中。但是,来自 nodedragover 事件的 targetNode 仍然具有旧状态。
如何获得树视图来反映商店,而不是从服务器重新加载商店(这应该全部在客户端完成)?
我觉得我在这里缺少一些基本概念。
您可以使用
treeView.refresh();
或
treeView.refreshNode(recordModified);
因为树视图是从 view.table 扩展而来的 这里是文档 http://docs.sencha.com/extjs/6.0.2/classic/Ext.view.Table.html#method-refresh