2011-01-22 18 views
6

Po prostu nie mogę tego wymyślić ani znaleźć żadnych dokumentów.Dodawanie metadanych do jsTree

mam goły JSON:

{ "dane": "węzeł", "metadane": { "content": "hellooooo"} }

ten zostanie załadowany, ale nie mogę wymyślić, jak napisać do tego pola, pobrać to pole i upewnić się, że jest on tworzony po utworzeniu nowego węzła.

Gdzie są dokumenty dotyczące metadanych?

Dzięki, Marco.

Odpowiedz

7

Znalazłem odpowiedź na http://groups.google.com/group/jstree/browse_thread/thread/28d0c8d3eb2d9f8f

jeśli używasz JSON i dostarczyć węzły z metadanych jak ten:

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

... ty” Będzie można uzyskać (i ustawić) dane:

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

Działa z najnowszym zatwierdzeniem (rc3/r233). W starszych wersjach używa

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

Ostatnim rozwiązaniem pracował dla mnie (domyślny pobierz teraz jest RC2).

+0

Otrzymuję 'data.rslt' jako undefined – mmcrae

+0

Nie mogę tego uruchomić. Wysyłam dane do moich węzłów za pośrednictwem wywołania AJAX - czy potrzebuję innego węzła 'data' i' metadata' w JSON? Udało mi się stworzyć strukturę drzewa z identyfikatorami i dziećmi bez głównego obiektu 'data' w JSON, tj. Po prostu' {"id": "3", "dzieci": [...]} ' – mmcrae

1

Dzięki, straciłem rozum nad tym. Żaden ze starych przykładów nie zadziałał! Więc w końcu mogę uzyskać dostęp do metadanych, problem polega na tym, że nie wiem jak iterować po nieznanej liczbie pól metadanych?

ok, teraz Sprawdziłem go i możliwe iteracyjne nad obiektu zwróconego przez dane() bez nazwanych parametrów

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

Jeśli trzeba unikać jstree_children Array się na twojej drodze, najlepszym sposobem na moim zdaniem jest do hermetyzacji metadane do innego obiektu w taki sposób:

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

następnie można iteracyjne przy użyciu:

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