2009-10-15 4 views
7

Je souhaite créer un composant Ext.tree.TreePanel et charger périodiquement du contenu à partir de l'URl externe. J'ai donc écrit quelque chose commeComment recharger Ext.tree.TreePanel à la demande?

new Ext.tree.TreePanel({ 
     root: { 
      nodeType: 'async', 
      text: 'asdasd', 
      draggable: false, 
      id: 'folders-tree-root' 
     }, 
     loader: new Ext.tree.TreeLoader() 
}); 

Et maintenant, je veux recharger cet arbre, donc j'écris:

tree.loader.dataUrl = 'folders-sample.json'; 
tree.root.reload(); 

Et rien ne se passe.

ajouter: La seule façon que j'ai trouvé est réglé une valeur non valide pour dataUrl sur TreeLoader création param:

new Ext.tree.TreePanel({ 
     root: { 
      nodeType: 'async', 
      text: 'asdasd', 
      draggable: false, 
      id: 'folders-tree-root' 
     }, 
     loader: new Ext.tree.TreeLoader(dataUrl: 'something') 
}); 

Répondre

7

Qu'est-ce que vous cherchez est la méthode load pour la TreeLoader. Donc, quelque chose comme ça devrait fonctionner vu votre exemple.

tree.getLoader().load(tree.root); 

Voici mon exemple complet qui est disponible sur mon site demo ainsi. C'est un peu artificiel et piraté depuis l'une des démos d'ExtJS, mais il devrait vous procurer ce dont vous avez besoin.

Ext.onReady(function() { 
    var root = new Ext.tree.AsyncTreeNode({ 
     text: 'Ext JS', 
     id: 'src' 
    }); 
    var reloadTree = function() { 
     tree.enable(); 
     tree.getLoader().dataUrl = 'get-nodes2.php'; 
     tree.getLoader().load(tree.root); 
    }; 

    var tree = new Ext.tree.TreePanel({ 
     animate: true, 
     autoScroll: true, 
     nodeType: 'async', 
     loader: new Ext.tree.TreeLoader(), 
     containerScroll: true, 
     border: false, 
     disabled: true, 
     id: 'myTree' 
    }); 

    var myPanel = new Ext.Panel({ 
     items: tree, 
     border: false, 
     tbar: [{ 
      text: 'Refresh', 
      handler: reloadTree 
     }] 
    }); 

    tree.setRootNode(root); 
    myPanel.render('tree'); 
}); 

Vive

+0

Je pense que votre exemple va cesser de fonctionner lorsque vous supprimez '{dataURL: 'get-nodes.php'}' de l'appel constructeur TreeLoader. Dans mon cas, j'étend Ext.tree.TreePanel, mais utilise un code similaire et cela ne fonctionne pas après la suppression de la définition 'dataUrl: 'fake-url''. –

+0

J'ai mis à jour l'exemple pour ne pas utiliser une valeur dataUrl dans le constructeur. Pour cette raison, je désactive initialement l'arborescence car elle ne contient aucune donnée. Cliquez sur le bouton d'actualisation, l'arborescence est chargée et activée. – rwilliams