【发布时间】:2013-11-20 15:58:37
【问题描述】:
非常感谢以下方面的帮助:
我有一个通过 URL 加载 JSON 数据的 jsTree。所有数据均已预加载。
我需要做的是更改搜索功能,根据用户输入通过 AJAX 使用新的 JSON 数据重新加载整个树(因为我需要在后端进行更复杂的节点搜索)。
首先,我要做的就是让 jsTree 代码调用我的 URL。我从最初加载树时使用的相同 URL 开始。
但是 - 这是我找不到解决方案的问题 - 尽管成功调用 URL 以首先加载树,但当我键入一些搜索文本并单击“搜索”时,jsTree 使用其正常的内部搜索来突出显示节点,但我提供的 URL 不再被调用。
HTML 是
<div>
<form>
<div>
<input id="treeSearchText" type="text" />
<button id="searchTree" class="btn">Search</button>
<button id="clearSearch" class="btn">Clear</button>
</div>
</form>
</div>
<div id="myJsTree" style="height: 100%;"></div>
我正在使用的 jsTree 初始化是:
var url = <my_url>;
$("#myJsTree").jstree({
"json_data" : {
async : true,
"ajax" : {
"url" : url
}
},
"search": {
"case_insensitive" : true,
"ajax" : {
"url" : url
}
},
'ui' : {
'select_limit' : 1,
'initially_selected' : [${myId}],
},
"plugins" : [ "json_data", "search", "sort", "ui", "themeroller" ],
});
以及搜索码的sn-p:
$("#searchTree").click(function() {
$("#myJsTree").jstree("search", $("#treeSearchText").val());
return false;
});
非常感谢任何帮助。
谢谢。
【问题讨论】:
-
你最后得到解决方案了吗?我现在正在做同样的事情 -
search插件选项的ajax部分的行为就像 jQuery ajax 选项一样,对我来说,我指定了type: "POST"、success函数和dataType: "JSON"以及我的成功功能已成功在我的控制台中记录结果。下一步,如何刷新树以包含原始结果中不存在的返回节点... -
我从来没有找到解决这个特定问题的方法。最后我不得不解决这个问题。我所做的是:更改搜索框的功能,以便它采用搜索条件并用它重新初始化整个树。然后,我向每个匹配的结果(在服务器端)添加了一个虚拟的不可见标志,然后,在重新显示树之后,我重写了 jsTree 搜索功能以始终突出显示具有该虚拟标志的节点。不是最优雅的,但效果非常好。