如何使用远程数据获取 Kendo HierarchicalDataSource 的长度?

Posted

技术标签:

【中文标题】如何使用远程数据获取 Kendo HierarchicalDataSource 的长度?【英文标题】:How to get length of Kendo HierarchicalDataSource with remote data? 【发布时间】:2021-10-05 12:07:53 【问题描述】:

我正在开发一个 javascript 函数,该函数将使用获取数据的 url 设置 kendo.data.HierarchicalDataSource 对象。在这个函数的最后,如果数据源实际上有数据,我想用数据设置一个树视图(这已经在工作了)。如果它没有数据,而不是设置树视图,我想让一个标签可见,告诉用户没有数据。

我的问题:如何确定 HierarchicalDataSource 中有/没有数据?当我尝试调用任何函数或获取 getData 的任何属性时,它会返回 undefined。

function loadTreeGroupData(applicationId) 
    var treeview = $("#treeview-kendo").data("kendoTreeView");
    var url = $('#urlHolders').data("gettreeUrl");
    var appId = 0;

    if (applicationId != undefined && applicationId != "")
        appId = applicationId;

    var getData = new kendo.data.HierarchicalDataSource(
        change: function (e) 
            for (var i = 0; i < e.items.length; i++) 
                e.items[i].load();
            
        ,
        transport: 
            read: 
                url: url, //"GetAlertsTree",
                dataType: "json",
                contentType: "application/json",
                data:  applicationId: appId 
            
        ,
        schema: 
            model: 
                id: "id",
                hasChildren: "hasChildren",
                children: "measureGroups"
            
        
    );   

    if (/*the treeview has data*/) 
        treeview.setDataSource(getData);
     else 
        /*set a label that tells the user that there's no data*/
    


【问题讨论】:

【参考方案1】:

我建议您对代码进行以下更改:

    在treeView初始化时设置HierarchycalDataSource,而不是以后再添加;

    将 treeView 的 div 和标签声明为 display:none 或以任何方式隐藏它们;

    使用DataSourcerequestEnd 事件来显示/隐藏元素。

<!DOCTYPE html>
<html>
<head>
    <base href="https://demos.telerik.com/kendo-ui/treeview/remote-data-binding">
    <style>html  font-size: 14px; font-family: Arial, Helvetica, sans-serif; </style>
    <title></title>
    <link rel="stylesheet" href="https://kendo.cdn.telerik.com/2021.2.616/styles/kendo.default-v2.min.css" />

    <script src="https://kendo.cdn.telerik.com/2021.2.616/js/jquery.min.js"></script>
    
    
    <script src="https://kendo.cdn.telerik.com/2021.2.616/js/kendo.all.min.js"></script>
    
    

</head>
<body>
            <div id="example">
            <div class="demo-section k-content">
                <div id="treeview" style="display: none"></div>
                <div id="no-data-label" style="display: none">No data found</div>
            </div>
            <script>
              
                var serviceRoot = "https://demos.telerik.com/kendo-ui/service";
                    homogeneous = new kendo.data.HierarchicalDataSource(
                        transport: 
                            read: 
                                url: serviceRoot + "/Employees",
                                dataType: "jsonp"
                            
                        ,
                        schema: 
                            model: 
                                id: "EmployeeId",
                                hasChildren: "HasEmployees"
                            
                        ,
                        requestEnd: (e) => 
                          if (e.response && e.response.length) 
                            $("#treeview").show();
                            $("#no-data-label").hide();
                          
                          else 
                            $("#treeview").hide();
                            $("#no-data-label").show();
                          
                        
                    );

                $("#treeview").kendoTreeView(
                    dataSource: homogeneous,
                    dataTextField: "FullName"
                );
            </script>
        </div>


    

</body>
</html>

Dojo

【讨论】:

以上是关于如何使用远程数据获取 Kendo HierarchicalDataSource 的长度?的主要内容,如果未能解决你的问题,请参考以下文章

Kendo UI - JSON 响应 - 使用带有服务器分组和服务器聚合的远程数据源的网格

Kendo UI javascript:远程绑定表单

将 Kendo Grid 绑定到远程数据 MVC 4

如何为 Kendo UI jQuery 的电子表格重新加载数据?

kendo 数据源中的 'options' 参数

如何使用 Kendo UI Grid 的 SetDataSource 方法