Javascript 在jstree树结构中动态创建节点
Javascript 在jstree树结构中动态创建节点,javascript,jstree,Javascript,Jstree,我必须从数据库中检索菜单项列表,并将其显示在树结构中我想使用菜单名作为节点名,使用菜单id作为节点id。 我使用的方法是使用ajax调用检索数据并将其放入列表中,然后将其显示为树。但我认为根据数据动态创建节点更有效 function createNodeList(){ $('#menuCPanel #contentData #tree').jstree({ "json_data" : { /*"
我必须从数据库中检索菜单项列表,并将其显示在树结构中
我想使用菜单名作为节点名,使用菜单id作为节点id。 我使用的方法是使用ajax调用检索数据并将其放入列表中,然后将其显示为树。但我认为根据数据动态创建节点更有效
function createNodeList(){
$('#menuCPanel #contentData #tree').jstree({
"json_data" : {
/*"data" : [{
"data" : {title : "menuName"},
"attr" : {id : "menuId"},
"state" : "closed"
}
],*/
"ajax" :{
"type" : "POST",
"url" : "?m=admin?action=getNodeList",
"dataType" : "json",
"data" : function(result){
return {
id : result.attr ? result.attr("id") : result['menuId'],
title : result.attr ? result.attr("title") : result['menuName']
};
},
},
},
"callback" : {
},
"themes" : {
"theme" : "classic",
"dots" : true,
"icons" : true
},
"plugins" : ["json_data", "themes"]
}).bind("select_node.jstree", function (e, data) { alert(jQuery.data(data.rslt.obj[0], "jstree").id) });
}
}
这是我的json数据的结构"data":[{"menuId":"1","menuName":"Top Menu"},{"menuId":"2","menuName":"Main Menu"},{"menuId":"3","menuName":"Bottom Menu"},{"menuId":"4","menuName":"Main Menu"}]}
我想知道上面的结果有什么问题,以及如何在ajax.success()中动态创建节点我看了一些示例,但它们都使用了jstree.cretate(),我无法在jstree.json_data.ajax.success()中调用它
提前感谢:)这是一个包含json数据的标准jstree,它还绑定了
select\u node
以在选择节点时执行操作。节点的ID不能是纯数字或包含jquery特殊选择器字符。数字标识必须首先具有标准字符。例如,1应该是N1,2应该是N2
$('#MyTreeDiv').jstree({
"json_data": {
"ajax": {
"type": "POST",
"url": "/MyServerPage.aspx?Action=GetNodes",
"data": function (n) { return { id: n.attr ? n.attr("id") : 0} },
}
},
"themes": {
"theme": "default",
"url": "/Content/Styles/JSTree.css",
"dots": false
},
"plugins": ["themes", "json_data", "ui", "crrm"]
}).bind("select_node.jstree", function (e, data) {
var selectedObj = data.rslt.obj;
alert(selectedObj.attr("id"));
});
从服务器返回的json必须采用jstree文档中定义的正确格式,并且不得包含多个特殊字符,除非这些字符被转义或json是使用序列化创建的。为什么要在success函数中再次构建树?调用服务器,返回json字符串并为您构建树。如果您想让标记转到某个地方,只需绑定select_node.jstreeoh ok。。。。我对这件事有点困惑。你能更具体地解释一下如何显示数据{action:'getNodeList'}检索到的节点吗?m=admin应该以文档中描述的格式返回json字符串。一旦从?m=admin传回json,您不需要创建成功或错误函数,也不需要更改json。从服务器接收到的ajax数据由树本身设置为正确的格式。好的,非常感谢。我将尝试此方法。我对其进行了更改,但随后出现错误“无法初始化[无法初始化模块(admin?action=getNodeList)]”,页面上有一个加载符号。这是我对“ajax”所做的更改:{“类型”:“POST”,“url”:“?m=admin?action=getNodeList”,“dataType”:“json”,“data”:函数(result){return{id:result.attr?result.attr(“id”):result['menuId'],title:result.attr?result.attr(“title”):result['menuName']},好的,谢谢Byron。你能解释一下函数(n){return{id:n:n.attr?n.attr(“id”):0}”,}它检查是否选择了节点(n),如果是,则将其id(n.attr(“id”)传递给服务器,否则将0传递给服务器。它检查是否选择了节点(n),如果是,则传递其id(n.attr(“id”)到服务器,否则将0传递到服务器。好的,非常感谢Cobb。感谢您的帮助,它部分工作。只需处理我的json数据格式