hy vọng điều này có thể giúp đỡ và xin lỗi tôi không sử dụng json. Tôi đang sử dụng jstree cùng với chức năng để mở các nút bằng cách nhấp vào các yếu tố bên ngoài từ html của jstree.
mỗi nút trong thiết lập của chúng tôi giống như trang web, vì vậy trên trang chủ của trang tổng quan, chúng tôi có danh sách các trang được chỉnh sửa gần đây.
mỗi các liên kết này có javascript này để thực thi
<a href="javascript: selectLeftNavNode(339);">Edit</a>
nơi 339 là id của trang chúng tôi muốn chỉnh sửa
và đây là chức năng fhe đã từng được thực hiện
function selectLeftNavNode(node) {
$('#demo').jstree('deselect_all');
$('#demo').jstree('select_node', '#node_' + node);
}
vấn đề chúng tôi nhận thấy gần đây rằng nếu trang được chỉnh sửa gần đây nằm sâu bên trong cây cụ thể hơn trong phần chưa được tải, nó sẽ bị lỗi
đây là lý do tại sao tôi quyết định thực hiện yêu cầu ajax đến máy chủ để lấy tất cả các mẹ id của
thay đổi mã dưới đây, ajax trong trường hợp của tôi sẽ trở lại một cái gì đó giống như xml tìm kiếm này
<?xml version="1.0" encoding="UTF-8"?>
<response>
<paths>
<path>339</path>
<path>338</path>
<path>38</path>
</paths>
</response>
và chức năng
function selectLeftNavNode(node) {
$('#demo').jstree('deselect_all');
if($('#demo').jstree('select_node', '#node_' + node) === false)
{
// if it is false means that the node is not yet rendered
// so instead of loading we will require to get list of parent nodes to open in order, then it will become available
// an ajax call should get us all the nodes
$.ajax({
type: "POST",
dataType: "xml",
url: your_url_to_php_script',
data: {node_id:node},
success: function(data)
{
var remaining_nodes = new Array();
var paths_count = $(data).find('response').find('path').length;
for(var x=1;x<=paths_count;x++){
remaining_nodes[x-1] = $(data).find('response').find('paths path:nth-child('+x+')').text();
}
open_nodes_step_by_step(remaining_nodes);
}
});
}
}
và thêm vào đó một chức năng được looped qua callbacks từ open_node, chức năng mở nút bằng nút và khi nó chạm t ông mục cuối cùng mà nên là id nút thực tế chúng ta muốn chọn nó sẽ sử dụng select_node thay
function open_nodes_step_by_step(remaining_nodes)
{
var nodes = remaining_nodes.slice();
tree = jQuery.jstree._focused();
if(nodes.length > 1){
var nodes_left = remaining_nodes.slice();
nodes_left.pop();
var to_open = nodes.length - 1;
tree.open_node(document.getElementById('node_' + nodes[to_open]), /*CALLBACK*/ function() {
open_nodes_step_by_step(nodes_left);
});
}
else{
tree.select_node('#node_' + nodes[0]);
}
}
tôi đã thử nghiệm giải pháp của tôi với IE8, FF và Chrome tất cả dường như chỉ làm việc tốt, trên đầu trang của tôi mà sử dụng jQuery v1.10.1 và jsTree 1.0-rc1 (không may là mã đã có trong nhiều năm nay và nó có tất cả cơ sở dữ liệu đó và các tích hợp khác tôi quyết định không thay đổi sang phiên bản mới hơn, nó hoạt động)
hy vọng tôi đã giúp ai đó
Tom