2014-01-30 38 views
0

我在几个地方使用KendoUI数据源,有些绑定控制别人不是。该调用是一个远程Web服务,可能会非常昂贵,有些我试图首先执行它。KendoUI数据源当不绑定到任何控件

我第一次需要的数据是针对不受控制约束的情况。

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上。

回答

1

从服务器检索数据是一个异步操作,所以当你迭代时,这个调用还没有完成。您应该使用fetch代替:

dataSource.fetch(function(){ 
    var data = this.data(); 
    console.log(data.length); 

    // now you can iterate over data 
}); 
+0

没有运气,我很害怕。直到DS被绑定到某个东西之前,fetch函数才会被调用。 – keitn

+0

这很奇怪 - 你正在使用哪个版本?检查此演示:http://jsbin.com/AnoXini/4/edit(获取,显示77条记录),并与此http://jsbin.com/AnoXini/3/edit比较(阅读,显示0条记录) –

+0

I正在使用最新版本(2013.3.1316)。与我看到的示例唯一的区别是我正在做一个HTTP帖子,而例子通常是GET。 – keitn