2010-08-27 8 views
21

Iniziare a giocare con jQuery e il plugin jsTree ieri, e farlo caricare con successo l'albero con una chiamata AJAX a un servlet. Ora, vorrei che l'albero aprisse tutti i nodi dopo il caricamento, quindi ho aggiunto una funzione di successo all'attributo ajax. Tuttavia, non riesco a ottenere il metodo open_all() per funzionare correttamente. Sono molto nuovo a lavorare con jQuery quindi immagino che sia qualcosa di semplice che sto sbagliando.Perché jsTree open_all() non funziona per me?

Firebug non mostra alcun errore che esclude lo stupido errore del nome del metodo in errore. Ho controllato la documentazione e penso che sto facendo tutto correttamente secondo quello che ho letto. L'albero si sta caricando correttamente, ma non apre tutti i nodi dopo il caricamento della pagina.

Sto utilizzando jQuery 1.4.2 e jsTree 1.0rc2 su Firefox 3.6.8.

Ecco il codice che sto usando per caricare l'albero e tentare di aprire tutti i nodi dell'albero:

// Create the tree object 
$("td#modelXML").jstree({ 
    core : { "animation" : 0 }, 
    //xml_data : {"data" : "" + xml, "xsl" : "nest"}, 
    xml_data : {"ajax" : 
        {"url" : "servlet/GetModelHierarchy", 
        "type" : "post", "data" : { modelId : "" + modelId} }, 
        "xsl" : "nest", 
        "success" : function(){ 
           $(this).open_all(-1); 
           } 
    }, 
    themes : {"theme" : "classic", "dots" : true, "icons" : true}, 
    types : { 
     "types" : { 
      "category" : { 
       "valid_children" : ["factor"] 
      }, 
      "factor" : { 
       "valid_children" : ["level"] 
      }, 
      "level" : { 
       "valid_children" : "none", 
       "icon" : { 
        "image" : "${request.contextPath}/jsTree/file.png" 
       } 
      } 
     } 
    }, 
    plugins : ["themes", "types", "xml_data"] 
}); 

risposta

38

Dovete agganciare negli eventi, e quindi chiamare open_all.

Per avere tutti i nodi aperti sul carico, utilizzare:

var tree = $("#id-or-selector-for-my-tree-element"); 
    tree.bind("loaded.jstree", function (event, data) { 
     tree.jstree("open_all"); 
    }); 

fare quanto sopra, prima di inizializzare l'albero con .jstree({...}).

Se si aggiorna, quindi di avere tutti i nodi aperti di nuovo, è necessario utilizzare:

tree.bind("refresh.jstree", function (event, data) { 
     tree.jstree("open_all"); 
    }); 
20

Sì, questa è una vecchia questione, ma senza risposta accettata e avendo l'unica risposta non essere utile per me, ecco la mia risposta, che ora uso:

var tree = $("td#modelXML") 
    .bind("loaded.jstree", function (e, data) { 
     data.inst.open_all(-1); // -1 opens all nodes in the container 
    }) 
    .jstree({ /* your jsTree options as normal */ }); 

il punto chiave qui è che data.inst è il vostro jsTree, ed è l'unico RIFERIMENTO avremo a disposizione perché non avrà un valore fino al .jstree({ finiture. Poiché loaded.jstree viene chiamato all'interno della chiamata .jstree({, il risultato non esiste ancora. Vedere?

+3

+1 Questo metodo ha funzionato per me, risposta accettata no. – RedFilter

+0

Ad ogni modo per fare questo lavoro dopo un aggiornamento? L'evento caricato non sembra sparare. C'è qualche altro evento che dice quando i dati sono stati caricati? – Jens

+0

per jstree v3 ora è necessario questo (stavo aprendo solo il nodo radice) '.on ('loaded.jstree', funzione (evento, dati) { data.instance.open_node ('0') })' – KeepCalmAndCarryOn

1

Prova questo!

$("td#modelXML").jstree("open_all","#nodeID"); 
+0

questo non funziona per me per alcune ragioni – user367134

2

ero completamente incapace di farlo funzionare sia con tree.jstree('open_all') o data.inst.open_all(-1) - alla fine ho dovuto usare data.instance.open_all() - notare il cambiamento da inst per esempio, e open_all (-1) per appena open_all() - entrambi sembrano essere richiesti con jQuery 1.11 e jstree 3.0.0. Il mio blocco di codice finale assomiglia a questo:

$(document).ready(function() { 
    var tree = $('#jstree'); 
    tree.bind('loaded.jstree', function(event, data) { 
     data.instance.open_all(); 
    }); 
    tree.jstree({}); 
});