我有一个jstree的json_data实现,它允许用户在树中打开不同的节点并查看内容。基本上就是这样:
.jstree({
"plugins" : [ "json_data", "ui" ],
"ui" : { "select_multiple_modifier": "on",
"selected_parent_close": "deselect" },
"json_data" : {
"ajax" : {
"url": function(node) {
... return a url ...
},
"success": function(metadata, textStatus, jqXHR) {
var parent = this._get_node(); // <- RACE CONDITION
return parseMetaDataNodes(metadata, parent);
}
}
}
如果用户以某种方式在第一次返回的AJAX响应之前单击两个节点,则会认为它们在树中具有相同的“父”,从而破坏了行为。
有没有人知道:
答案 0 :(得分:2)
我遇到了类似的问题,最后我采用了你的第二个解决方案,即阻止进一步的select_node函数执行,直到一个标志被清除:
$("#treeHost").jstree({Your Plugin setup code}).bind("before.jstree", function(event, data) {
if (data.func == "select_node" && !canSelectNodes) {
event.stopImmediatePropagation();
return false;
}
})
根据官方文档,before.jstree
是一个特殊事件,您可以绑定以阻止操作执行。我检查函数是否执行select_node
,如果是,则在canSelectNodes
为假时不执行。
这样,您可以在代码中的其他地方切换canSelectNodes
标志为false,以防止树接受节点选择。