【问题标题】:KendoUI Datasource when not bound to any controls未绑定到任何控件时的 KendoUI 数据源
【发布时间】:2014-02-22 17:43:58
【问题描述】:

我在几个地方使用了 KendoUI 数据源,有些绑定到控件,有些则没有。该调用是对远程 Web 服务的调用,并且可能非常昂贵,有些我试图先执行它。

我第一次需要数据是针对未绑定到控件的情况。

I call a function similar to this to create the datasouce:

function BuildDS() {
    var DS = new kendo.data.DataSource({
        transport: {
            read: {
                url: "../WS/GetData",
                dataType: 'json',
                contentType: "application/json; charset=utf-8",
                type: "POST"
            }
        }
    });

    return DS;
}

然后我有另一个遍历 DS 的函数。

function GetName(DSIn, fieldID) {

    DSIn.read();

    var visname = "";
    $.each(DSIn.data(), function (idx, vis) {
        if (vis.FIELD_ID == fieldID) {
            visname = vis.DISPLAY_LABEL;
            return false;
        }
    });
    return visname;
}

我可以看到正在调用远程 Web 服务并按预期返回数据。但是 DS 的 data() 属性始终不返回任何数据。

当我将相同的数据源绑定到 Kendo 控件时,数据会填充到 DS 上。

【问题讨论】:

    标签: javascript api kendo-ui datasource


    【解决方案1】:

    从服务器检索数据是一个异步操作,因此当您进行迭代时,此调用尚未完成。你应该改用fetch:

    dataSource.fetch(function(){
      var data = this.data();
      console.log(data.length); 
    
      // now you can iterate over data
    });
    

    【讨论】:

    • 恐怕不行。在 DS 绑定到某个东西之前,不会调用 fetch 函数。
    • 这很奇怪——你用的是哪个版本?查看此演示:jsbin.com/AnoXini/4/edit(获取,显示 77 条记录)并与此 jsbin.com/AnoXini/3/edit(读取,显示 0 条记录)进行比较
    • 我使用的是最新版本 (2013.3.1316)。我看到的示例与我看到的唯一区别是我正在做一个 HTTP 帖子,而示例通常是 GET。
    • 我正在 $(document).ready 中调用上述函数,我怀疑我的问题是在加载 DOM 之前无法调用它们。
    • 好吧,您不必等待就绪事件来创建/填充 DS;我不确定您最终要达到的目标 - 无论如何,正如您在演示中看到的那样,如果您想获取数据并对其进行迭代,您可以使用 fetch
    猜你喜欢
    • 1970-01-01
    • 2012-11-28
    • 1970-01-01
    • 1970-01-01
    • 2011-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多