jsTree懒惰的搜索

时间:2015-02-02 19:44:38

标签: javascript jstree jstree-search

是否可以进行"懒惰搜索"使用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似乎没有对服务器的响应做任何事情。

1 个答案:

答案 0 :(得分:2)

我可能很晚才回答这个问题,但这里有一个类似的问题:
jsTree AJAX search with some node childs?

接受的答案包含发送到服务器的详细信息以及响应应该是什么(一组唯一的父ID)。

确保从search.ajax.data中删除该函数 - 此属性不能是函数 - 它是标准的jQuery AJAX配置(因此它应该是一个对象,jstree将添加一个str属性它)。

顺便说一句,请确保您可以实际向127.0.0.1:5000发送请求,因为原始策略相同 - 也许您需要添加CORS标头。

如果这没有帮助,请提供服务器响应(标题和正文)。