У меня есть две сетки деревьев, которые имеют один и тот же магазин. Когда я перетаскиваю элемент из одного в другое, все необходимые обновления появляются (запись исчезает из местоположения на левом дереве, места на правом дереве, левое дерево теперь также показывает новое место размещения).ExtJS 6.2 Обновление данных TreeGrid из хранилища без перезагрузки с сервера
Однако, если я пытаюсь перетащить одну и ту же запись обратно в исходное место, похоже, что ее родитель никогда не обновлялся, чтобы сказать, что он ушел.
Вот где я проверяю, если я могу уронить предмет:
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 («Бассейны»), она отражает, что этот пункт был удален из него старый родительский и теперь находится на новом родителе. Тем не менее, targetNode из события nodedragover по-прежнему имеет старое состояние.
Как я могу получить представление дерева, чтобы отразить хранилище, но без перезагрузки магазина с сервера (все это должно быть сделано на стороне клиента)?
Я чувствую, что здесь отсутствует фундаментальная концепция.
ты прав. Часть моей первоначальной проблемы заключалась в том, что я использовал дочерний атрибут, а не атрибут childNodes для выполнения назначений и перемещения. – Stats4224