JSTREE在第二次加载时失败

时间:2016-04-29 21:33:54

标签: javascript jquery jstree asp.net-mvc-5

我正在构建一个MVC 5 Web应用程序,其中我在视图上有一个JSTREE实例。 Tree正在加载正常,但是当我在数据库中更改了som数据,并且重新加载树时,我得到了错误:

未捕获的TypeError:$(...)。jstree不是函数

这个错误似乎与我对树,重新加载,刷新等所做的任何事情都有关。

失败的一个例子:

$("#tree")
    .jstree({
	    "core": {
		    "data": [{ text : "node", "children" : ["1","2"] }]
		}
	});

$('#rfr')
    .on("click", function (e, data) {
        $("#tree").jstree(true).deselect_all();
        $("#tree").jstree(true).refresh();
        $("#tree").jstree("refresh");
    });
@{
    ViewBag.Title = "OrgAdmin";
}


<script src="@Url.Content("~/Scripts/jquery-1.10.2.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jstree.js")" type="text/javascript"></script>

<link rel="stylesheet" type="text/css" href="@Url.Content("~/Scripts/themes/default/style.min.css")">

<div id="tree"></div>
<button id="rfr">refresh</button>

我从一个工作小提琴中获取了代码:http://jsfiddle.net/DGAF4/30/ 这里刷新工作,但是当复制到我的mvc应用程序时,它失败

我希望你能帮助我,让我的mvc app刷新这棵树。

好心的Kåre

1 个答案:

答案 0 :(得分:0)

我在为'全部关闭'和'展开全部'添加两个按钮时遇到了类似的问题,并设法通过在_Layout中注释掉jquery捆绑行来解决。 cshtml文件:

@Scripts.Render("~/bundles/jquery")

显然,源代码似乎包括两次jquery引用,一个在_Layout.cshtml文件中,一个在我的视图文件中。一旦我删除了jquery包,它运行正常。我想我必须在其他视图中显式添加jquery引用。希望有所帮助。

这是视图代码:

@using OrgChart.Models;
@using OrgChart.Controllers;
@model IEnumerable<TreeNode>
@{  ViewBag.Title = "Home Page";}

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jstree/3.3.1/themes/default/style.min.css" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/jstree/3.3.1/jstree.min.js"></script>

<script type="text/javascript">
    jQuery(function ($) {
        var $treeview = $("#treeview");
        $treeview.jstree({
            "core": { // core options go here
                "multiple": false, // no multiselection
                "themes": {
                    "dots": false // no connecting dots between dots
                }
            },
            "state": { "key": "state_demo" },
            "plugins": ["themes", "html_data"]
        })
        //.on('ready.jstree', function () {
        //    $treeview.jstree('open_all');
        //});
    });
</script>

<br/>
<input id="btnCloseAll" type="button" value="Collapse All" onclick="$('#treeview').jstree('close_all');"> &nbsp;
<input id="btnExpandAll" type="button" value="Expand All" onclick="$('#treeview').jstree('open_all');">
<br /><br />
<div class="row">
    <div id="treeview" class="treeview">
        @MvcHtmlString.Create(Html.RenderTree(ViewData.Model, node => node.Name))
    </div>
</div>