2011-01-22 14 views
6

Non riesco a capirlo, o trovare documenti.Aggiunta di metadati a jsTree

Ho un JSON ridotto all'osso:

{ "dati": "nodo", "metadati": { "content": "hellooooo"} }

Questo viene caricato, ma non riesco a capire come scrivere in questo campo, recuperare questo campo e assicurarmi che sia fatto quando viene creato un nuovo nodo.

Dove sono i documenti per i metadati?

Grazie, Marco.

risposta

7

ho trovato la risposta a http://groups.google.com/group/jstree/browse_thread/thread/28d0c8d3eb2d9f8f

se si sta utilizzando JSON e di fornirti i nodi con un metadata come questo:

{ 
"data": "This is the name of the node", 
"metadata": { 
    "number": "no1", 
    "description": "Description" 
    } 
} 

... si' Sarai in grado di ottenere (e impostare) i dati in questo modo:

$('div#jstree').jstree(
/* ...options... */ 
).bind('select_node.jstree', 
function(e, data){ 
    alert( $(data.rslt.obj).data('description') 
); }); 

Questo funziona con la più recente commit (RC3/R233). Nelle versioni più vecchie utilizza

$(data.rslt.obj).data("jstree").description 

L'ultima soluzione ha funzionato per me (il download di default per ora è RC2).

+0

Continuo a ricevere 'data.rslt' come non definito – mmcrae

+0

Non riesco a farlo funzionare. Sto inviando dati ai miei nodi tramite una chiamata AJAX: ho bisogno di un diverso nodo 'dati' e' metadata' nel JSON? Sono stato in grado di creare la struttura ad albero con id e child senza un oggetto 'dati' di root in JSON i.e. solo' {"id": "3", "children": [...]} ' – mmcrae

1

Grazie, stavo perdendo la testa. Nessuno dei vecchi esempi ha funzionato! Quindi finalmente posso accedere ai metadati, il problema è che non so come iterare su un numero sconosciuto di campi di metadati?

ok, ora ho controllato ed è possibile iterare oggetto restituito da dati() senza parametri denominati

.bind("select_node.jstree", function (e, data) { 
    var propsObj = $(data.rslt.obj).data(); 
    for (var prop in propsObj) { 
     alert(prop + " = " + propsObj[prop] + "\n"); 
    } 
}); 

Se è necessario evitare Array jstree_children ottenere nel vostro senso, il miglior modo in la mia opinione è di incapsulare i metadati in un altro oggetto in questo modo:

"metadata" : {"properties" : {"prop1" : "aa1a", "prop2" : "123"}} 

allora si può iterare utilizzando:

var metadata = $(data.rslt.obj).data(); 
for (var prop in metadata.properties) {...}