带有 json 速度问题的剑道 ui 树视图

Posted

技术标签:

【中文标题】带有 json 速度问题的剑道 ui 树视图【英文标题】:kendo ui treeview with json speed issue 【发布时间】:2013-09-27 08:56:48 【问题描述】:

我已经使用外部 json 文件完成了剑道 ui 树

如果我的节点在 200 左右,这可以正常工作

但是如果我有大量数据会花费很多时间

检查这个http://infinitelyinfinite.com/treeview/

这是我的 jQuery 代码

$.getJSON("/testTree.json", function (data) 
    $("#treeview").kendoTreeView(
        dataSource: data
    );
)

这是我的JSON 文件的示例

[
    
        "id"   :100,
        "text" :"Region",
        "items":[
            
                "id"   :1,
                "text" :"Asia",
                "parent_id" :100, 
                "items":[
                    
                        "id"   :2,
                        "text" :"Central Asia",
                        "parent_id" :1, 
                        "items":[
                            
                                "id"  :3,
                                "text":"Afghanistan",
                                "parent_id" :2, 
                            ,
                            
                                "id"  :4,
                                "text":"Azerbaijan",
                                "parent_id" :2, 
                            
                        ]
                    ,
                    
                        "id"   :5,
                        "text" :"East Asia",
                        "parent_id" : 1,
                        "items":[
                            
                                "id"  :6,
                                "text":"China"
                            
                        ]
                    
                ]
            ,
            
                "id"   :7,
                "text" :"Europe",
                "parent_id" :100, 
                "items":[
                    
                        "id"   :8,
                        "text" :"Central Europe",
                        "parent_id" :7, 
                        "items":[
                            
                                "id"   :9,
                                "text" :"Austria",
                                "parent_id" :8, 
                                "items":[
                                    
                                        "id"  :10,
                                        "parent_id" :9, 
                                        "text":"Carinthia"
                                    
                                ]
                            ,
                            
                                "id"   :11,
                                "text" :"Czech Republic",
                                "parent_id" :8, 
                                "items":[
                                    
                                        "id"  :12,
                                        "text":"Carinthia",
                                        "parent_id" :11, 
                                    
                                ]
                            
                        ]
                    
                ]
            
        ]
    
]

有什么办法让它快吗??? 需要一些时间 30S 或 40S

【问题讨论】:

您需要一次加载完整的树吗?你能检索到第一个大陆、地区、国家……吗?这将允许只发送所需的数据,html 渲染会更快。 @Onbai 不,我不想一次加载完整的树,你可以从这里下载我的 json 文件http://infinitelyinfinite.com/treeview/js/region_tree.json 【参考方案1】:

将您的代码更改为:

$.getJSON("/testTree.json", function (data) 
    $("#treeview").kendoTreeView(
        dataSource: 
            data : data
        
    );
);

从对象而不是数组初始化 DataSource 似乎要快得多。

您网站中的代码(经过一些小的清理后)将显示为:

<head>
    <title> Json Tree</title>
    <link href="styles/kendo.common.min.css" rel="stylesheet"/>
    <link href="styles/kendo.default.min.css" rel="stylesheet"/>
    <script src="js/jquery.min.js"></script>
    <script src="js/kendo.all.min.js"></script>
</head>

<div class="demo-section" style="float:left;">
    <h3 class="title">Select Continents</h3>

    <div id="treeview" class="demo-section"></div>
</div>
<body>
<script type="text/javascript" charset=utf-8>
    //  $(document).ready(function () 
    $.getJSON("/js/region_tree.json", function (data) 
        $("#treeview").kendoTreeView(
            dataSource    : 
                data: data
            ,
            dataTextField : "text",
            dataValueField: "id"
        );
    );

    //  );
</script>
</body>

你也可以这样做:

<script type="text/javascript" charset=utf-8>
    $(document).ready(function () 
        var tree = $("#treeview").kendoTreeView(
            dataTextField : "text",
            dataValueField: "id"
        ).data("kendoTreeView");

        $.getJSON("/js/region_tree.json", function (data) 
            tree.dataSource.data(data);
        );
    );
</script>

在使用getJSON 读取JSON 后,我直接将其分配给树的dataSource

【讨论】:

如果你不介意我想要这个文档,我可以在剑道 UI 中使用相同的逻辑进行多选吗??? bdw 非常感谢你是救世主.... :) 你想要什么样的文件? AFAIK,这实际上没有记录,而是我在与您“玩”大量数据时发现的。这很可能是对如何处理数据源中的数组和对象造成的某种副作用。但这是只有 KendoUI 开发者才能回答的问题…… 我可以对kendoMultiSelect 使用相同的概念吗?我也想从 json 文件中搜索...?? 你可以我不知道结果是否相同。我没有查看 Kendo UI 代码,因此这种速度改进没有记录在案,并且可能在未来的实施中发生变化。在这里,我们应该让一些 Kendo UI 人员说出最后一句话。

以上是关于带有 json 速度问题的剑道 ui 树视图的主要内容,如果未能解决你的问题,请参考以下文章

剑道树视图,过滤项目

Kendo UI 树视图绑定

剑道网格内的剑道树视图

带有backbonejs的剑道UI

如何根据子节点数对剑道树视图进行排序

如何以编程方式单击剑道树视图节点[关闭]