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