2011-01-22 34 views
6

Tôi không thể tìm ra điều này hoặc tìm bất kỳ tài liệu nào.Thêm siêu dữ liệu vào jsTree

Tôi có một trần xương JSON:

{ "dữ liệu": "nút", "siêu dữ liệu": { "nội dung": "hellooooo"} }

này được nạp, nhưng tôi không thể tìm ra cách viết vào trường này, lấy trường này và đảm bảo rằng nó được tạo khi một nút mới được tạo.

Tài liệu cho siêu dữ liệu ở đâu?

Xin cảm ơn, Marco.

Trả lời

7

Tôi tìm thấy câu trả lời ở http://groups.google.com/group/jstree/browse_thread/thread/28d0c8d3eb2d9f8f

nếu bạn đang sử dụng JSON và bạn cung cấp nút của bạn với một siêu dữ liệu như thế này:

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

... bạn' sẽ có thể nhận (và đặt) các dữ liệu như sau:

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

Điều này hoạt động với cam kết mới nhất (rc3/r233). Trong các phiên bản cũ nó sử dụng

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

Giải pháp cuối cùng làm việc cho tôi (tải về mặc định cho tại là RC2).

+0

Tôi tiếp tục nhận 'data.rslt' như undefined – mmcrae

+0

Tôi không thể làm việc này. Tôi đang gửi dữ liệu đến các nút của mình thông qua cuộc gọi AJAX - tôi có cần nút 'data' khác và nút' metadata' trong JSON không? Tôi đã có thể tạo cấu trúc cây với id và trẻ em mà không có đối tượng gốc 'dữ liệu' trong JSON tức là chỉ' {"id": "3", "children": [...]} ' – mmcrae

1

Cảm ơn, tôi đã mất trí vì điều đó. Không có ví dụ nào trong số các ví dụ cũ hoạt động! Vì vậy, cuối cùng tôi có thể truy cập siêu dữ liệu, vấn đề là tôi không biết cách lặp qua số lượng trường siêu dữ liệu không xác định?

ok, bây giờ tôi đã kiểm tra nó và nó có thể để lặp qua đối tượng được trả về bởi dữ liệu() không có tham số tên

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

Nếu bạn cần phải tránh jstree_children Mảng nhận theo cách của bạn, cách tốt nhất trong Theo tôi là để đóng gói siêu dữ liệu vào đối tượng khác như vậy:

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

sau đó bạn có thể lặp lại sử dụng:

var metadata = $(data.rslt.obj).data(); 
for (var prop in metadata.properties) {...} 
Các vấn đề liên quan