是否可以进行"懒惰搜索"使用JsTree,搜索结果可以是包含当前不在树中的节点的路径?我有一个大树,我节点加载懒惰,并希望能够处理包含当前未加载的节点的搜索。
到目前为止,唯一对我有用的是使用搜索回调并替换树中的所有数据并刷新。我想知道是否有一种不那么愚蠢的方法来实现这一点。
旧文件似乎暗示如此:
"此对象可用于向每个服务器发出请求 搜索 - 如果您使用异步树,则非常有用。那样你就可以回来了 在实际DOM搜索之前需要加载的ID数组 执行(以便匹配搜索的所有节点都是 加载)。例如,如果用户搜索" string",您就可以得到它 在服务器端,检查数据库,发现有一个 包含该字符串的节点。但节点是其他节点的孩子 节点等 - 所以在您的响应中,您必须返回节点的路径 (没有节点本身)作为id:[" #root_node"," #child_node_3"]。这个 表示jstree将在执行客户端之前加载这两个节点 侧搜索,确保您的节点可见。"
我尝试使用以下代码对其进行测试。搜索确实触发了一个url调用,但如果我返回的节点不存在,jsTree似乎没有使用响应或抛出错误。我也没有看到对服务器的另一个查询,这可能是树中不存在的节点所需要的:
<html>
<body>
<div id="jstree">tree goes here</div>
<input type="button" class="button" value="Search" id="search" style="">
</body>
<link rel="stylesheet" href="static/dist/themes/default/style.min.css"/>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<script src="static/dist/jstree.js"></script>
<script type="text/javascript">
$("#search").click(function () {
console.log("search");
$("#jstree").jstree("search", "test");
});
$('#jstree').jstree({
core: {
data: {
dataType: "json",
url: function (node) {
console.log(node.id);
return node.id === "#" ? "http://127.0.0.1:5000/" : "http://127.0.0.1:5000/";
}
}
},
search: {
case_insensitive: true,
ajax: {
url: "http://127.0.0.1:5000/",
"data": function (n) {
return { id: n.attr ? n.attr("id") : 0 };
}
}
},
plugins: ["json_data", "search"]
})
;
</script>
</html>
jsTree asynchronous search - trigger load new nodes的解决方案似乎对我不起作用。 jsTree似乎没有对服务器的响应做任何事情。
答案 0 :(得分:2)
我可能很晚才回答这个问题,但这里有一个类似的问题:
jsTree AJAX search with some node childs?
接受的答案包含发送到服务器的详细信息以及响应应该是什么(一组唯一的父ID)。
确保从search.ajax.data
中删除该函数 - 此属性不能是函数 - 它是标准的jQuery AJAX配置(因此它应该是一个对象,jstree将添加一个str
属性它)。
顺便说一句,请确保您可以实际向127.0.0.1:5000
发送请求,因为原始策略相同 - 也许您需要添加CORS标头。
如果这没有帮助,请提供服务器响应(标题和正文)。