Kendo Grid对我来说是新手,所以我为无知而道歉。我正在编写一个角度应用程序,它使用单独的服务来更新本地数组。它存储在$ scope.searchResults变量中。我已经使用dataSource - >传输属性初始化了网格,希望当上面提到的数组更新时,数据源和网格也会相应地更新。不是这种情况。数组已更新,没有任何问题,但数据源永远不会更新。我会尽力粘贴下面的所有代码片段和控制台输出。
HTML:
<div class="margin-top-25" ng-show="searchResults">
<div id="report-grid" kendo-grid="grid" options="mainGridOptions"></div>
</div>
Grid配置的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 :(得分:2)
因为当网格最初绑定到选项对象时,您通过将k–options
指向选项对象来引用在选项对象内声明的数据,因此它尚未填充数据。如果使用k-data-source
单独引用数据源对象,它将绑定到数据源并在数据源更改时更新网格。如果要更改选项对象触发重新呈现,则需要使用k–rebind
或setOptions
方法。请务必阅读后者的文档,因为有一些警告。
答案 1 :(得分:0)
好吧,我不知道它为什么会按原样运行,但是使用当前的项目配置,这就是解决方案。
网格配置和更新数据源的功能在同一模块中。网格本身在另一个控制器中初始化。我已经将更新功能移动到包含网格的控制器,现在它可以很好地工作。
如果有人知道原因,请随意加入。