jstree - 在一次调用中加载整个树

时间:2012-02-16 19:37:57

标签: jquery jstree

我正在使用它:

$('#topicTree').jstree({ 
        "json_data" : {
            "ajax" : {
                url : serviceUrl
            }
    },
    "plugins" : ["themes", "json_data", "ui", "crrm", "hotkeys"]
});

但是当我点击一个节点时,它会重新启动ajax请求,并再次检索并填充整个顶级树节点的节点。我知道有一个按需或延迟加载功能,但我试图尽可能避免这种情况。我也使用了以下内容:

$("#tree").jstree({
    "plugins" : ["themes", "json_data", "ui", "crrm", "hotkeys"],
    "json_data" : {
        "ajax" : {
            "type": 'GET',
            "url": function (node) {
                //debugger;
                var nodeId = "";
                var url = "";
                if (node == -1)
                {
                    url = "/ajax/gettopics/";
                }
                return url;
            },
            "success": function (data) {
                //debugger;
                return data;
            },
            "error":function(data) {
                //debugger;
                alert("error loading tree!");
            }
        }
    }
}).bind("loaded.jstree", function (event, data) {
    //alert("TREE 2 IS LOADED!");
});

1 个答案:

答案 0 :(得分:1)

好的,所以发现了问题......我被序列化为Json的DTO区分大小写。魔鬼在细节中 - 我改变了命名惯例:

public class JsTreeJsonNode
{
    public string data { get; set; }
    public Dictionary<string, string> attr { get; set; }
    public string state { get; set; }
    public List<JsTreeJsonNode> Children { get; set; } 
}

public class JsTreeJsonNode
    {
        public string data { get; set; }
        public Dictionary<string, string> attr { get; set; }
        public string state { get; set; }
        public List<JsTreeJsonNode> children { get; set; } 
    }

儿童的资本'C'确实引起了一些动荡。哎呀...

当子dict被填充时,ajax请求不会被触发,除非它被返回为null或空(零成员),这对我的场景很有效。