2014-01-30 3 views
0

KendoUI 데이터 소스를 여러 곳에서 사용하고 있으며, 일부는 컨트롤에 바인딩되어 있습니다. 이 호출은 원격 웹 서비스에 대한 것이고 꽤 비싸기 때문에 먼저 실행하려고합니다.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; 
} 

원격 웹 서비스가 호출되고 예상대로 데이터를 반환하는 것을 볼 수 있습니다. 그러나 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가 바인딩 될 때까지 호출되지 않습니다. – keitn

+0

이상하게 - 어떤 버전을 사용하고 있습니까? 이 데모를 확인하십시오 : http://jsbin.com/AnoXini/4/edit (가져 오기, 77 개의 레코드 보여주기) 및이 http://jsbin.com/AnoXini/3/edit (읽기, 0 레코드보기)와 비교 –

+0

I 최신 빌드를 사용하고 있습니다 (2013.3.1316). 필자가 보았던 샘플과의 유일한 차이점은 예를 들어 GET 일 때 HTTP 게시를하고 있다는 것입니다. – keitn

관련 문제