2013-07-12 8 views
10

ho intenzione di usare jsTree di visualizzare albero come strutture e vorrei raggiungere il seguente comportamento:jsTree: come espandere tutti i nodi sulla prima visualizzazione e quindi salvare e ripristinare lo stato con il plugin 'cookies'

  • sulla visualizzazione prima volta voglio avere tutti i nodi espansi
  • eventuali visualizzazioni consecutivi potranno ripristinare lo stato precedente della struttura ad albero utilizzando i "cookies" plug

Vincoli:

  • Io uso oggetti JSON per popolare l'albero
  • Non posso usare 'initially_open' attributo per elencare gli ID per la prima visualizzazione perché sarà difficile determinare gli ID iniziali

In altre parole voglio ottenere qualcosa di simile a a) cambia lo stato predefinito del nodo in 'apri' o b) determina se questa è la prima visualizzazione (probabilmente esaminando gli attributi del plugin 'cookie' se non abbiamo lo stato persistuto) e in tal caso, chiama "open_all"

Le idee sono apprezzate. Grazie!

+0

erano una delle risposte utili per te? Se sì, contrassegnarlo come risposta. Questo ti darà anche dei crediti di reputazione. – Matt

risposta

5

Per espandere tutti i nodi, è sufficiente utilizzare

$("#treeView").jstree("open_all"); 

È possibile includere nel caricamento iniziale, in questo modo

$('#treeView').jstree(
{ 
    "themes": { 
     "theme": "default", 
     "dots": false, 
     "icons": false 
    }, 
    "plugins": ["themes", "html_data", "checkbox", "ui"] 
}).jstree("set_theme", "apple") 
.bind("loaded.jstree", function (event, data) { 
    $(this).jstree("open_all"); 
}); 

Allo stesso modo, se si desidera controllare tutti gli elementi, utilizzare

$(this).jstree("check_all"); 

Per quanto riguarda i cookie, non l'ho utilizzato, ma è disponibile un plug-in denominato jquery.cookie.js. Suppongo che contenga metodi per caricare/salvare dati da/a un cookie. È necessario associare un altro evento, come ad esempio

.bind("change_state.jstree", function (evt, data) { ... }); 

per acquisire lo stato-cambiamento e il caricamento iniziale in caso loaded.jstree avrebbe letto dal cookie. Si prega di controllare this link per saperne di più sulla gestione dei cookie, entrambi sono menzionati - come si può usare con o senza questo plugin.

3

risposta di Matt è tutto bene, ma come jstree v3 concerne utilizzare l'evento ready.jstree, invece, in modo da farla breve:

$('#treeView').jstree(treeOptions) 
.bind("ready.jstree", function (event, data) { 
    $(this).jstree("open_all"); 
}); 
+2

"loaded.jstree" dovrebbe essere "ready.jstree" nella risposta? – BigJ

+0

yeap, ho pensato pronto e scritto caricato, invece, grazie :) – mikus

Problemi correlati