2016-10-24 1 views
0

У меня есть две сетки деревьев, которые имеют один и тот же магазин. Когда я перетаскиваю элемент из одного в другое, все необходимые обновления появляются (запись исчезает из местоположения на левом дереве, места на правом дереве, левое дерево теперь также показывает новое место размещения).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 по-прежнему имеет старое состояние.

Как я могу получить представление дерева, чтобы отразить хранилище, но без перезагрузки магазина с сервера (все это должно быть сделано на стороне клиента)?

Я чувствую, что здесь отсутствует фундаментальная концепция.

ответ

1

Вы можете использовать

treeView.refresh(); 

или

treeView.refreshNode(recordModified); 

, потому что вид дерева простирались от view.table Здесь документы http://docs.sencha.com/extjs/6.0.2/classic/Ext.view.Table.html#method-refresh

+0

ты прав. Часть моей первоначальной проблемы заключалась в том, что я использовал дочерний атрибут, а не атрибут childNodes для выполнения назначений и перемещения. – Stats4224

Смежные вопросы