2016-03-31 9 views
0

Ich habe ein Baumraster an einen Proxy-Speicher gebunden, der aktualisiert werden muss, indem alle x Sekunden ein Webservice aufgerufen wird. Dieses Geschäft hat N Datensätze und ich muss alle von ihnen aktualisieren (zum Beispiel diese Datensätze sind Aufgaben Ausführungen und ich muss den Fortschritt zu aktualisieren).ExtJS 6 - Aktualisiere den Proxy-Speicher und behalte den aktuellen Netzstatus

Wie kann ich dieses Gitter "neu laden", ohne die erweiterten Zweige zu verlieren? Es scheint so zu sein, als wäre der Laden geleert und aufgefüllt worden, es wäre gut, wenn der Laden intelligent genug wäre, um die neuen Aufzeichnungen hinzuzufügen und die vorherigen zu aktualisieren, ist das möglich?

Antwort

3

Ich denke, ich habe das gleiche Problem konfrontiert. Ich löste es mit dem Senden eines zusätzlichen Parameters, wenn der Speicher neu geladen wurde, was dem Back-End mitteilte, welcher der Knoten gerade expandiert ist. Dann fügte ich die Daten der erweiterten Knoten in die Antwort ein, da ich nur die erweiterten Knoten neu laden musste (die nicht erweiterten Knoten sind nicht sichtbar und werden beim Erweitern geladen).

Also in Ihrem Fall könnten Sie anhängen und Event-Handler auf das Geschäft "Vorher laden" Ereignis, das die Informationen über die erweiterten Knoten an die Anfrage anhängen würde. Dann bei Ladenereignis expandieren Sie die Knoten, die erweitert wurden.

also vor Belastung der Knoten speichern:

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); 
}); 

Und auf Lastaufnahme des ausgedehnten Zustands

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(); 
          } 
         } 
        } 
       } 
     }); 

Ich kann später einen Ausschnitt schreiben, wenn Sie möchten.

+0

Ja! Es scheint eine nette Annäherung zu sein, ich werde es nicht als Antwort markieren, bis ich es versuche, danke. –

+0

Hast du es schon probiert? Bitte als Antwort markieren, wenn es in Ordnung ist. – taubi19

+0

Ja, es funktionierte wie ein Zauber! Vielen Dank! (Bitte editieren Sie Ihren Beitrag im ersten Block, den Sie "funciton" anstelle von "function" geschrieben haben). –