2014-01-30 67 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