每个级别的jstree切换操作

时间:2016-10-15 22:52:56

标签: ajax jstree



<script type="text/javascript">
  //trying to mimmick dee's answer here: http://stackoverflow.com/questions/32290570/lazy-loading-treeview-with-jstree-in-asp-net-mvc
$(function() {
        var $children = $("#object-children-tree");

        $children.jstree({
            "core": {
                "animation": 0,
                "data": {
                    "url": function(node) {
                        return '@Url.Action("GetNodes", "BatchData")';
                    },
                    "data": function (selectedNode) {
                        // Hopefully, each time jstree needs to make an AJAX call this function will be called.
                        // # is the special ID that the function receives when jstree needs to load the root nodes.
                        if (selectedNode.id == "#")
                            return { "selectedNodeId": selectedNode.id }
                        if (selectedNode.data.nodeType == "provider")
                            return { "selectedNodeId": selectedNode.id, "selectedNodeType": selectedNode.data.nodeType }
                        if (selectedNode.data.nodeType == "fileType")
                            return { "selectedNodeType": selectedNode.data.nodeType, "blockId": selectedNode.data.blockId, "selectedNodeParentId": selectedNode.parent }

                        return {"selectedNodeId": selectedNode.Id}
                    }
                }
            },
            "plugins": ["wholerow"]
        });
    });
</script>

<div id="object-children-tree">
    @* Content will be populated by jsTree *@
</div>
&#13;
&#13;
&#13;

我一直在阅读关于ajax和回调的jstree文档和线程。但是,我无法弄清楚如何将它们应用到我的问题中。我的树有五个级别。当我在第一级切换节点时,我希望它调用特定的服务器动作(&#34; / controller / action&#34; b / c我使用MVC)。然后应该出现二级子级,从服务器的结果创建。当我在第二级切换节点时,我希望它调用另一个服务器动作(&#34; / controller / differentAction&#34; - MVC)。然后应该出现三级孩子。依此类推:切换三级节点并调用另一个操作,响应用于生成四级子级。如果这肯定得到了回答,你能指导我去哪里看看,并可能解释它是如何适用的吗?我认为与我的例子的不同之处在于,通过在每个级别上切换节点来调用不同的操作。我需要这样做,因为每个节点的子节点数非常多。

谢谢,

**编辑:**我放弃了调用不同操作的想法,只允许特定操作来处理要调用的其他操作,这很好。

    [HttpGet]
    public ActionResult GetNodes(string selectedNodeId = null, string selectedNodeType = null, string blockId = null, string selectedNodeParentId = null)
    {
        if (selectedNodeId == "#") //Root nodes
        {
            return AllProviders();
        }
        if (selectedNodeType == "provider")
        {
            return FileTypesOfProvider(Convert.ToInt32(selectedNodeId));
        }
        if (selectedNodeType == "fileType")
        {
            return FilesOfProviderOfType(Convert.ToInt32(blockId), Convert.ToInt32(selectedNodeParentId));
        }
        return AllProviders();

    }

1 个答案:

答案 0 :(得分:0)

我错误地命名了realFiles的父级,导致重复的ID。现在我已经解决了这个问题。