据作者说,jsTree Documentation:
当打开一个关闭的节点(没有加载的子节点)时,会发出一个AJAX请求。
如何配置 jsTree 以摆脱为每个空/无子节点发出的这些AJAX数据请求?我希望我的空节点保持空(或没有孩子)!
JSON数据容器( data.json )
{
"data" : "Root node with no children",
"children" : []
}
jsTree配置
{
"json_data" : {
"ajax" : {
"url" : "data.json",
"type" : "GET",
"dataType" : "json",
"dataFilter" : function (data, type) {
//some filtering function
}
}
},
"plugin" : ["json_data"]
}
答案 0 :(得分:11)
将叶节点的状态标记为“leaf”。那应该解决它。
答案 1 :(得分:1)
我遇到了这个问题,设置属性state ="关闭"在XML树的无子节点上。删除state属性可以解决问题。
答案 2 :(得分:0)
几周前我遇到过类似的问题。我在“url”字段中进行了函数调用,最终导致java代码基于SQL查询生成了JSON字符串。所以,当我点击一个没有孩子的封闭节点时,再次调用该函数,产生一个无穷无尽的树。
我解决这个问题的方式是:
"json_data" : {
"ajax" : {
"url" : "getAreaTree?treeType=Areas&ownerPhone=<%=webSessionObject.getUserPhoneNum()%>",
"data" : function (n) {
return { id : n.attr ? n.attr("id") : 0 };
}
}
},
“data”中定义的函数的结果将作为参数添加到“url”函数中。然后我可以检查参数是0(初始加载)还是1(我的root的id)或其他。
如果这对您不起作用,也许您可以尝试这样的事情:
.bind("before.jstree",function(event,data){
if(data.func === "create"){
var foo = true;
data.inst._get_node(null, true).each(function () {
if(this.id!=rootId && this.id!=0){
foo = false;
})
if(!foo){
event.stopImmediatePropagation();
return false;
}
}
})
我不确定这是否有效。在所有事件发生之前,“before.jstree”开火。我正在检查要触发的函数是否为“create”,如果是,我检查所选节点的id。如果它不是我的root的id或0(初始加载),我停止创建函数。
我对不同的情况使用类似的结构,所以这样的事情应该有效。可能是“创建”事件不是你应该绑定的事件。您可以将其更改为
.bind("before.jstree",function(event,data){
console.log(data.func)
if(data.func === "create"){
查看调用哪些函数。
答案 3 :(得分:0)
跳过children属性。显然你的节点没有子节点,但你指定了属性?只需跳过它,节点将呈现为叶节点,不会再发出任何请求。
答案 4 :(得分:0)
我也一直在努力解决这个问题。我从jsTree - loading subnodes via ajax on demand
得到了主要想法基本问题是,当我们单击未设置为leaf的子节点时,将使用我们在树配置中设置的URL生成新的AJAX请求。在上面的链接中看到的技巧是提供一个函数而不是静态URL字符串。我的jstree用于在服务器上显示目录结构,因此我可以安排动态添加到子目录的URL。如果将函数分配给jstree配置中ajax属性的url属性,则该函数将接收您单击的节点作为参数。我的节点显示目录或文件的名称,因此我可以使用text()函数来获取原始目录名称。在这个方式返回的名称前面似乎有一些空间,所以我使用了一个String trim()函数,然后使用encodeURIComponent来给我一些我可以在URL中使用的东西。
如果将-1传递给url函数,那么您可以在root用户处安全地使用基本URL。现在,这仅适用于层次结构的第一级。我还有更多的工作要做,添加节点元数据的完整路径或类似的东西,但这个想法可能会让你走上正轨。它看起来好像不是一个错误,而是设计。您必须确保子节点触发的请求向服务器发送合适的URL。
这是我在jstree配置中分配给ajax对象的url属性:
"url": function (node) {
var subDirectory = "",
url = "";
if (node === -1)
{
url = "/tree_service/tree/format/json?path=exercises";
}
else
{
subDirectory = encodeURIComponent(node.text().trim());
url = "/tree_service/tree/format/json?path=exercises/" + subDirectory;
}
return url;
}
我的计划是通过轮询节点的完整路径来累积构建URL,然后添加上面的节点名称以创建最终的URL。伪代码:
//haven't figured out how to add the path to the node and then retrieve it
path = node.metadata.path;
path = encodeURIComponent(path);
subDirectory = encodeURIComponent(node.text().trim());
url = path + "/" + subDirectory;
<强>更新强> 请参阅我的答案how to get the metadata of jsTree.,了解如何使用node.data()。path
从节点获取元数据