2011-09-06 5 views
13

Quando faccio la seguentecome ricaricare/aggiornare/reinizializzare DynaTree?

$('#tree').dynatree("option","initAjax",{url:"http://google.com"}); 

voglio dynatree di dimenticare i dati degli alberi attuali e ricaricare con nuovi dati dall'URL specificato, invece. Ma trovo che non lo faccia per impostazione predefinita.

Grazie.

risposta

13

guarda il metodo tree.reload(), dovrebbe fare ciò che stai cercando.

vedere la documentazione qui: http://wwwendt.de/tech/dynatree/doc/dynatree-doc.html#h8.2

come nella documentazione, l'albero è il disegno interno della struttura, e si ottiene richiamando il comando getTree: $("#node").dynatree("getTree")

+0

cos'è "albero" qui e come posso accedervi ?? –

+0

ci sei ?? –

+0

Ho aggiunto una modifica per essere più chiara. – longstaff

5

Funzione l'inizializzazione:

function InitTree() { 
    $("#tree3").dynatree({ 
     (...init params...) 
    }); 
} 

InitTree(); 

Per ricaricare i dati, chiamare:

$("#tree3").dynatree("destroy"); 
InitTree(); 
8

tree.reload(); è per dati caricati dinamicamente come in Ajax. Se stai lavorando con elenchi ul/li e hai bisogno di ricaricare il tuo albero, devi fare: $("#tree").dynatree("destroy");prima del il tuo normale codice di creazione del dinastree. Il parametro destroy non è documentato (vedere http://wwwendt.de/tech/dynatree/doc/dynatree-doc.html).

+0

Informazioni molto utili. Grazie! – DavidB

5

questa domanda è un duplicato di Trying to reload/refresh dynatree with new data

La mia soluzione non richiede deviazioni come empty() e destroy() ecc Pensate a questo: Quando il Dynatree si è creato specificare un dizionario di impostazioni è necessario utilizzare. Tuttavia, dato che questo è un dizionario di configurazione, non sarà rivalutato anche se alcuni parametri sono variabili e cambiamenti dovuti ai clic, ecc. Quindi per risolvere questo ed evitare operazioni costose come eliminare il DOM e ricrearlo, lo facciamo nel modo in cui penso che Gli sviluppatori Dynatree ha questa destinazione (ma non così chiaramente documentato nella esempio AJAX/JSON):

//The HTML: 
     <input name="filter" id="checkbox" type="checkbox" value="X">Checkme<br> 
     <label id="mylabel"></label> 

    $("#checkbox").click(function() { 
    $("#mylabel").text($(this).is(":checked")) 
    $("#tree").dynatree("option", "initAjax", { 
      url: "myurl/myphp.php", 
      data: { 
       myparameter: $("#checkbox").is(":checked").toString() 
      } 
    }); 

    $("#tree").dynatree("getTree").reload(); 
    }); 

questo esempio imposta la configurazione sul #tree ogni volta che viene cliccato il pulsante, quindi ricarica l'albero.

+1

Link solo le risposte non sono benvenuti in SO – hims056

+4

Grazie per l'educazione. Ho modificato la mia risposta per includere la risposta completa. – user1737092

0
n= "#tree"; 
$(n).dynatree({}); 
tree = $(n).dynatree("getTree"); 
root = tree.getRoot(); 
tree.enableUpdate(false); 
root.removeChildren(); 
tree.enableUpdate(true); 
1

Inizialmente, stavo usando le "opzioni" con initAjax per effettuare la chiamata ajax. Tuttavia, dal momento che dovevo mostrare un messaggio di errore in caso di risposta vuota dal server dopo la ricarica, ho deciso di seguire la solita procedura Ajax. Faccio la chiamata ajax, ottengo la risposta e quindi ricarico l'albero. Così ho fatto come questo nel mio file javascript

var myObj = {getDynaTree :function(){ 

    //Refresh the dynatree 
    $("#dynaTree").dynatree("option", "children", null); 
    $.ajax({ 
     url: "myurl", 
     type: "POST", 
     dataType: "application/json", 
     headers:{'Accept' :'application/json', 'Content-Type':  'application/json' }, 
     data : JSON.stringify(myData), 
     //handle the response 
     complete : function(treeData) 
      { 

      $("#dynaTree").dynatree("option", "generateIds", true);  

      var parsedTreeData = JSON.parse(treeData.responseText); 

      if(parsedTreeData.length ==0) { 
       var parsedTreeData = [{title: "No documents found for the search criteria, please revisit the criteria", 
        isFolder: false, tooltip: "No documents found for the search criteria, please revisit the criteria" }]; 

      } 
      $("#dynaTree").dynatree("option", "children", parsedTreeData); 
      $("#dynaTree").dynatree("getTree").reload(); 

      } 
     }); 

    }} 

chiamando la funzione

$("#myLink").click(function() { myObj.getDynaTree(); } 

La dynatree è stata inizializzata in un separato file JavaScript

//Initialization for the dyna tree. 
    var treeData = [{title: "Dynamic Tree Demo",isFolder: false, tooltip: "Here, is your Dynamic Tree!" }]; 

    jQuery(document).ready(function() { 
    initReqActions(treeData); 
    }); 

    initReqActions= function(myTree){ 
    $("#dynaTree").dynatree({ 
     checkbox: false,    
     selectMode: 2, 
     // create IDs for HTML elements that are generated 
      generateIds: true, 
      cookie: { 
       expires :-1 
      },  
     children: myTree,   
     onQuerySelect: function(select, node) { 
      if(node.data.isFolder) 
       return false; 
     }, 

     onClick: function(node, event) { 
      if(! node.data.isFolder) 
       node.toggleSelect(); 
     }, 
     onDblClick: function(node, event) { 
      node.toggleExpand(); 
     }, 
     onKeydown: function(node, event) { 
      if(event.which == 32) { 
       node.toggleSelect(); 
       return false; 
      } 
     } 


    }); 
} 
2

se si desidera ricaricare la Dynatree Mezzi primi Rimuovere il nodo Da lui sotto il codice

$ ("# Albero") dynatree ("GetRoot") removeChildren()..;

+0

Grazie per averlo aspettato –

+0

il mio piacere .... –