2011-01-22 23 views
6

Simplemente no puedo resolver esto, o encontrar cualquier documento.Adición de metadatos a jsTree

Tengo un JSON escueto:

{ "datos": "nodo", "metadatos": { "contenido": "hellooooo"} }

Esto se carga, pero no puedo entender cómo escribir en este campo, recuperar este campo y asegurarme de que esté hecho cuando se crea un nuevo nodo.

¿Dónde están los documentos para los metadatos?

Gracias, Marco.

Respuesta

7

he encontrado la respuesta a http://groups.google.com/group/jstree/browse_thread/thread/28d0c8d3eb2d9f8f

si está usando JSON y entregarle sus nodos con una metadatos como esto:

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

... usted' ll ser capaz de obtener (y establecer) los datos de esta manera:

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

Esto funciona con la nueva cometer (RC3/R233). En las versiones más antiguas que utiliza

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

La última solución funcionó para mí (la descarga por defecto por ahora es RC2).

+0

Sigo recibiendo 'data.rslt' como undefined – mmcrae

+0

No puedo hacer que esto funcione. Estoy enviando datos a mis nodos a través de una llamada AJAX. ¿Necesito un nodo 'data' y un nodo' metadata' en el JSON? Pude crear la estructura de árbol con id's e hijos sin un objeto raíz 'data' en el JSON, es decir,' '" id ":" 3 "," niños ": [...]}' – mmcrae

1

Gracias, estaba perdiendo la cabeza por eso. ¡Ninguno de los viejos ejemplos funcionó! Entonces, finalmente, ¿puedo acceder a los metadatos, el problema es que no sé cómo iterar sobre un número desconocido de campos de metadatos?

bien, ahora he comprobado y es posible iterar sobre objeto devuelto por los datos() sin parámetros con nombre

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

Si es necesario evitar matriz jstree_children en su camino, la mejor manera en mi opinión es encapsular metadatos en otro objeto de esta manera:

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

entonces se puede repetir usando:

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