JSTREE 在第二次加载时失败

JSTREE fails on second load

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

未捕获类型错误:$(...).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>

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

我希望你能帮助我,让这棵树在我的 mvc 应用程序上刷新。

好心的 Kåre

我在为 'Close All' 和 'Expand All' 添加两个按钮时遇到了类似的问题,并设法通过注释掉 jquery _Layout.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>