2011-08-23 16 views
5

Mam listę zagnieżdżoną z treestore. Podczas pierwszego ładowania magazyn jest ładowany idealnie i lista jest wyświetlana zgodnie ze sklepem. Kiedy klikam przycisk odświeżania, mój treestore powinien zostać przeładowany nowymi danymi (z tym samym modelem danych, co za pierwszym razem), a lista zagnieżdżona musi zostać ponownie załadowana nowym zestawem danych.Jak ponownie załadować TreeStore?

Poniżej jest moja definicja 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(); 

W Ext.data.JsonStore mam osiągnąć taki sam sposób za pomocą store.loaddata(). Ale nie mogłem znaleźć metody loaddata() dla TreeStore.

Uprzejmie mi pomóż.

Odpowiedz

0

Ten sklep nie ma sklepu takiego jak JsonStore. Automatycznie pokazuje wszystkie węzły i przeładowuje się w razie potrzeby.

W przypadku, gdy Rootnode (rightPaneStoreData) jest AsyncTreeNode (ładowany przez AJAX), można użyć:

rightPaneStoreData.reload()
(bo rightPaneStoreData to węzeł główny).

lub alternatywnie (bardziej ogólne):
tree.root.reload();
(gdzie drzewo jest nawiązaniem do drzewa)

Jeśli nie jest to ASyncTreeNode, trzeba to zrobić ręcznie. Ponownie wywołaj funkcję getFolderListData() i przypisz nowego użytkownika root do drzewa. (tree.setRootNode())

+0

powyższym zaproponował dwa fragmenty kodu nie działał dla mnie – shatthi

+0

są jakieś błędy na konsoli? (Chrome Devtools/Firefox Firebug?) –

+0

Tak, w chrome, mówi, że funkcja reload() nie jest dostępna zarówno w odniesieniu do referencji right treestoredata, jak i treestore reference. – shatthi

9

To działa dla mnie. Używam MVC i ten kod jest wywoływany w moim kontrolerze.

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

treeStore.getRootNode(). RemoveAll(); jest dokładnie tym, czego potrzebowałem, aby uniknąć jednoczesnych wywołań ajaxów dla każdego węzła, gdy treeStore.load(); nazywa się –

+0

To działa, ale czy masz jakiś pomysł, dlaczego zabiera to zbyt dużo czasu, aby usunąć rekordy z mojego 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 
}); 
Powiązane problemy