我有以下HTML
<div id='jstree_demo'></div>
我调用了jsTree来初始化树
function set_tree() {
$('#jstree_demo').jstree({
"core": {
"animation": 0,
"check_callback": true,
"themes": { "stripes": true },
"data": {
"type": "POST",
"contentType": "application/json; charset=utf-8",
"url": function (node) {
return node.id === '#' ? 'Data.aspx/get_node_root' :
'Data.aspx/get_node_children';
},
"data": function (node) {
return "{'id': '" + node.id + "'}";
}
}
},
"plugins": [ "themes", "json_data", "ui"]
});
}
一旦我调用get_node_root
函数,就会触发对set_tree()
的调用。
来自服务器的返回数据是:
[{"id":1,"text":"Grand Parent", "state":"closed"}]
树视图很好地更新。但问题是文件夹旁边没有箭头,似乎Grand Parent
不可点击。
我修改了服务器函数get_node_root
以使其返回:
[{"id":1,"text":"Grand Parent", "state":"closed",
"children":[
{"id":20,"text":"Son 1"},
{"id":30,"text":"Son 2"}
]
}]
然后我再次加载页面。这一次,Grand Parent
出现了Son 1
和Son 2
预加载。
这一次,Grand Parent有一个我可以使用的折叠箭头。但儿子们没有。当我单击Son
或Parent
时,不再对服务器进行调用。我正在使用Chrome开发者工具查看是否存在可能正在停止呼叫的服务器错误或javascript语法错误。什么也没发生。
我甚至试过这个:
...
"data": {
"type": "POST",
"contentType": "application/json; charset=utf-8",
"url": function (node) {
alert('node id is: ' + node.id); // The alert is: #
return node.id === '#' ? 'Data.aspx/get_node_root' :
'Data.aspx/get_node_children';
},
...
警报始终显示标识为#
即使我点击或展开任何儿子或父母,警报也不会再次出现。
我在服务器代码后面放了一个断点,该函数返回父项和子项。除了初始调用之外,不再从服务器执行代码...
我花了5个小时试图弄清楚什么是错的。我找到了相关的答案,但没有一个答案有效。
我做错了什么?