#javascript #extjs #extjs6 #extjs6-classic
#javascript #extjs #extjs6 #extjs6-классический
Вопрос:
У меня есть две древовидные сетки, которые используют одно и то же хранилище. Когда я перетаскиваю элемент из одного в другой, кажется, происходят все необходимые обновления (запись исчезает из местоположения в левом дереве, размещается в правом дереве, левое дерево теперь также показывает новое размещение).
Однако, если я попытаюсь перетащить ту же запись обратно в исходное место, окажется, что ее родительский элемент никогда не обновлялся, чтобы сказать, что он ушел.
Здесь я проверяю, могу ли я удалить элемент:
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 все еще имеет старое состояние.
Как я могу получить древовидное представление, отражающее хранилище, но без перезагрузки хранилища с сервера (все это должно выполняться на стороне клиента)?
Я чувствую, что мне здесь не хватает какой-то фундаментальной концепции.
Ответ №1:
Вы можете использовать
treeView.refresh();
или
treeView.refreshNode(recordModified);
поскольку представление дерева расширено из view.table
Вот документы http://docs.sencha.com/extjs/6.0.2/classic/Ext.view.Table.html#метод-обновить
Комментарии:
1. Вы правы. Часть моей первоначальной проблемы заключалась в том, что я использовал дочерний атрибут, а не атрибут childNodes для выполнения назначений и перемещения.