jsTree通过AJAX从后台获取数据

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

页面代码:

<divid="MenuTree"></div>

javascript代码:

$(document).ready(function($) {

InitMenuTree();

});functionInitMenuTree() {

$('#MenuTree').data('jstree',false);

$.getJSON('@Url.Action("GetMenuTree", "AdminMenu")',function(json) {

$('#MenuTree').jstree({'core': {'data': json

}

});

});

$('#MenuTree').on('changed.jstree',function(node,data){varid = data.instance.get_node(data.selected[0]).id;//节点点击事件获取IDClickMenuTree(id);

})

$('#MenuTree').on('loaded.jstree',function(e, data) {

data.instance.open_all();//默认展开所有节点})

}

使用jQuery的getJson方法从后台获取数据,然后直接放到data后面就行了。

后台代码:

Models:(这是jstree要求的格式)

publicclassAdminMenuTreeNoteModel

{publicstringid {get;set; }publicstringparent {get;set; }publicstringtext {get;set; }publicstringicon {get;set; }

}

Controllers:(我用的是.Net MVC 这不重要,直接把数据按照规定的JSON格式传出去就行了)

publicActionResult GetMenuTree()

{vartrees =fromaindbc.AdminMenusselectnewAdminMenuTreeNoteModel

{

id=a.ID.ToString(),

parent= (a.ParentMenu >0? a.ParentMenu.ToString() :"#"),//默认根节点的parent是“#”text =a.Title,

icon= (a.IconClass.Length >0? a.IconClass :"icon-doc")//部分节设定好了图标,没有图标的使用默认图标

};returnJson(trees.ToList(), JsonRequestBehavior.AllowGet);

}

完事,还是很简单的。但是JsTree的官方网站里的文档根本看不懂。

这里是规定的JSON格式:

//Alternative format of the node (id & parent are required){

id :"string"//requiredparent :"string"//requiredtext :"string"//node texticon :"string"//string for customstate : {

opened : boolean//is the node opendisabled : boolean//is the node disabledselected : boolean//is the node selected},

li_attr : {}//attributes for the generated LI nodea_attr : {}//attributes for the generated A node}

UPDATE:

后来初始化树代码改成这样了:

function InitMenuTree() {

$('#MenuTree').on('changed.jstree',function (node,data){varid = data.instance.get_node(data.selected[0]).id;//获取IDClickMenuTree(id);

FromStateShow();

})

$('#MenuTree').on('loaded.jstree', function (e, data) {

data.instance.open_all();//默认展开所有节点})

GetMenuTreeData();

}

function GetMenuTreeData() {

$('#MenuTree').data('jstree',false);

$.Ajax({

url:'@Url.Action("GetMenuTree", "AdminMenu")',

type:'post',

dataType:'json'})

.done(function(data) {

$('#MenuTree').data('jstree',false).empty().jstree({'core': {'data': data

}

});

});

}

这样可以直接调用 GetMenuTreeData() 刷新树了。

我发现 $.getJSON() 可能有缓存,反正还用 $.getJSON 修改后没有办法刷新树内容。

如果只是显示出来不需要刷新的话就无所谓,需要刷新还得换一个方法。

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航