2015-10-07 118 views
1

Kendo Grid對我來說是新手,所以我爲無知道歉。我正在編寫一個使用單獨服務更新本地數組的角度應用程序。它存儲在$ scope.searchResults變量中。我已經使用dataSource - > transport屬性初始化了網格,希望當上面提到的數組更新時,數據源和網格也會相應更新。不是這種情況。數組已更新,沒有任何問題,但數據源從不更新。我會盡我所能粘貼所有代碼片段,並在下面輸出控制檯輸出。Kendo Grid datasource永遠不會更新

HTML:

<div class="margin-top-25" ng-show="searchResults"> 
    <div id="report-grid" kendo-grid="grid" options="mainGridOptions"></div> 
</div> 

的DataSource適當網格配置:

dataSource: { 
       transport: { 
        read: function read(options) { 
         options.success($scope.searchResults); 
        } 
       }, 
       schema: { 
        model: { 
         id: "id", 
         fields: { 
          name: {type: "string"}, 
          dataSource: {type: "string"} 
         } 
        } 
       }, 
       pageSize: 10 
      } 

功能用於更新的數據源:

function runSearch() { 
     RetrieveReportsService.query({name: vm.searchData.name, dataSource: vm.searchData.dataSource}, 
      function success(result) { 
       $log.log($scope.grid.dataSource); 

       $log.log($scope.searchResults); 
       $scope.searchResults = result.elements; 
       $log.log($scope.searchResults); 

       $scope.grid.dataSource.read(); 
       $log.log($scope.grid.dataSource); 
      }); 
    } 

現在控制檯輸出:

第一次登錄的數據源:

O…e.e…d.init {options: Object, _map: Object, _prefetch: Object, _data: ObservableArray.extend.init[2], _pristineData: Array[2]…} 

第一次登錄$ scope.searchResults:

[Object, Object] 

第二次記錄$ scope.searchResults:

[Object] 

第二次記錄數據源:

O…e.e…d.init {options: Object, _map: Object, _prefetch: Object, _data: ObservableArray.extend.init[2], _pristineData: Array[2]…} 

請注意,在更新$ scope.searchResults之前和之後,每個數據源的可觀察數組長度爲2。

如果需要的話,我可以深入到輸出中,但不希望這篇文章壓倒一切。

謝謝!

+0

您應該使用k-data-source來引用您的數據。 – hally9k

回答

2

因爲當網格最初綁定到選項對象時,它沒有用數據填充,因此您在選項對象中通過指向k–options來引用在選項對象內聲明的數據。如果您使用k-data-source分別引用數據源對象,則它將綁定到您的數據源並在數據源更改時更新您的網格。如果您想對選項對象進行更改,請觸發重新提交,您需要使用k–rebindsetOptions方法。請務必閱讀後者的文檔,因爲有一些注意事項。

0

嗯,我不知道爲什麼它的工作方式,但與目前的項目配置這是解決方案。

網格配置和更新數據源的功能在同一模塊中。網格本身在另一個控制器中初始化。我已經將更新功能移動到包含網格的控制器,現在它完美地工作。

如果有人知道爲什麼,請隨時參加。