Tro*_*sum 6 jquery jstree asp.net-mvc-4
我目前无法刷新整个jstree; 初始树加载工作正常,刷新子节点也按预期工作,但如果数据在根节点中发生更改,即使数据已更改并且已对服务器进行调用,树也不会刷新.
我将尝试解释jstree的设置.
全局变量
var levelType;
Run Code Online (Sandbox Code Playgroud)
树设置
$("#explorer").jstree({
plugins: ["core", "ui", "themes", "json_data", "types"],
themes: {
theme: "default",
dots: false,
url: url = '@Url.Content("~/Content/jstree/default/style.css")'
},
json_data: {
ajax: {
cache: false,
url: function (node) {
var nodeId = "";
var url = "";
if (node == -1) {
url = '@Url.Action("GetSites", "Site")';
} else if ($(node).attr("rel") == "station") {
url = '@Url.Action("GetInspections", "Inspection")' + '/' + $(node).attr("id");
}
return url;
},
success: function (metaData, textStatus, jqXhr) {
if (levelType == null || levelType == undefined || levelType == "root") {
//The initial node that is hard coded and will never change
var sitesData = [{ attr: { rel: "root" }, state: "open", data: "Root Node", children: [] }];
$(metaData).each(function () {
sitesData[0].children.push({ attr: { id: this.Id, rel: "station" }, state: "closed", data: this.Name });
});
return sitesData;
}
if (levelType == "station" || levelType == "inspection") {
var items = [];
$(metaData).each(function () {
items.push({ attr: { id: this.Id, rel: "inspection", "class": "jstree-leaf" }, state: "closed", data: this.Name });
});
return items;
}
return null;
}
}
},
types: {
types: {
"station": {
"icon": {
"image": '@Url.Content("URL")'
}
},
"inspection": {
"icon": {
"image": '@Url.Content("URL")'
}
},
'loading': {
'icon': {
'image': '@Url.Content("URL")'
}
},
'root': {
'icon': {
'image': '@Url.Content("URL")'
}
}
}
}
});
Run Code Online (Sandbox Code Playgroud)
树节点打开事件
$("#explorer").bind("before.jstree", function (e, data) {
if (data.func === "open_node") {
levelType = $(data.args[0]).attr("rel");
}
});
Run Code Online (Sandbox Code Playgroud)
此调用按预期工作并刷新站级别下的子节点
var tree = jQuery.jstree._reference("#explorer");
var currentNode = tree._get_node("#the node Id");
var parent = tree._get_parent(currentNode);
// this returns "inspection"
levelType = $(currentNode).attr("rel");
//the parent node is the station node
tree.refresh(parent);
Run Code Online (Sandbox Code Playgroud)
这个电话不起作用,但应该刷新整个树
var tree = jQuery.jstree._reference("#explorer");
var currentNode = tree._get_node("#the node id");
//set the level the tree should be refreshing its data for (this is to ensure that the tree view knows it is not at a root node).
var parent = tree._get_parent(currentNode);
//this returns "root"
levelType = $(parent).attr("rel");
tree.refresh(-1);
Run Code Online (Sandbox Code Playgroud)
我希望有人可以帮助我,因为它让我发疯.
干杯
您可以将树放置在局部视图中,在父局部视图上创建一个 div,然后在该 div 内渲染树局部视图。
然后,当您调用刷新树时,您可以只对 renderAction 执行 Json 获取,并将父部分的内容替换为内容树部分。在此过程中,它将完全异步,您可以应用自定义动画。
<div id="parent">
@Html.RenderPartial("tree")
</div>
<script>
$(function)({
// this could be any event
$('some id').click(function(){
//this could also be a post, we call the controller action and it returns the
//partialview
$.get("GetTree", function(data){
$('#parent').html(data);
});
});
</script>
Run Code Online (Sandbox Code Playgroud)