2011-08-23 1 views
5

Ho nestedlist con treestore. Durante il primo caricamento, il negozio viene caricato perfettamente e l'elenco viene visualizzato in base al negozio. Quando faccio clic sul pulsante di aggiornamento, il mio server deve essere ricaricato con nuovi dati (con lo stesso modello di dati della prima volta) e anche l'elenco nidificato deve essere ricaricato con una nuova serie di dati.Come ricaricare TreeStore?

Qui di seguito è la mia definizione treestore

rightPaneStoreData = getFolderListData(); 

rightPaneStore =new Ext.data.TreeStore({ 

    autoLoad:false, 

    model: 'FIMT.models.rightPaneModel', 

    root: rightPaneStoreData, 
    proxy: { 

    type: 'memory', 

    reader: { 

     type: 'tree', 
     root: 'items' 
     } 

    }, 
    listeners: { 
     datachanged: function(records){ 
      alert("datachanged"); 
      } 
    } 

    }); 

rightPaneStore.load(); 

In Ext.data.JsonStore ho compiuto il metodo stesso utilizzando store.loaddata(). Ma non riuscivo a trovare il metodo loaddata() per TreeStore.

Gentilmente aiutatemi.

risposta

0

Il TreePanel non ha un negozio come un JsonStore. Mostra automaticamente tutti i nodi e ricarica quando necessario.

Nel caso la vostra rootNode (rightPaneStoreData) è un AsyncTreeNode (caricato tramite AJAX), è possibile utilizzare:

rightPaneStoreData.reload()
(perché rightPaneStoreData è il vostro nodo principale).

o in alternativa (più generico):
tree.root.reload();
(dove l'albero è un riferimento per il vostro albero)

Se non si tratta di un ASyncTreeNode, dovrete farlo manualmente. Chiama di nuovo la tua funzione getFolderListData() e assegna la nuova radice all'albero. (tree.setRootNode())

+0

quanto sopra suggerito due frammenti di codice non ha funzionato per me – shatthi

+0

Ci sono degli errori sulla tua console? (Chrome Devtools/Firefox Firebug?) –

+0

Sì in chrome, dice che il reload() non è disponibile sia per il riferimento a destra che per il riferimento a treestore. – shatthi

9

Questo funziona per me. Sto usando MVC e questo codice viene chiamato nel mio controller.

treeStore.getRootNode().removeAll(); 
treeStore.load(); 
+0

treeStore.getRootNode(). RemoveAll(); è quello di cui avevo esattamente bisogno per evitare chiamate ajax simultanee fatte per ogni nodo quando treeStore.load(); si chiama –

+0

Questo sta funzionando ma, hai qualche idea del perché ci vuole troppo tempo per rimuovere i record dal mio treestore – Dibish

0
treeStore.getRootNode().removeAll(); 
treeStore.setRootNode({ 
    id: rootNodeId, 
    text: 'root' 
    // other configs in root 
}); 
// if you had non-standard children loads, then you would need to call: 
treeStore.getProxy().load(); 
// if you had non-standard children loads, and you had params in your load, then you would need to call: 
treeStore.getProxy().load({ 
    params: { 
    node: rootNodeId 
    } 
}); 
0
// Remove all current children if clear on load not set 
if (!treeStore.clearOnLoad) { 
    record.removeAll(); 
} 

// Call load, refreshing our view when done... 
var viewRefresher = function() { 
    view.refresh(); 
}; 

treeStore.load({ 
    node: record, 
    callback: viewRefresher 
});