Angularjs 剑道网格数据源从不更新

Angularjs 剑道网格数据源从不更新,angularjs,kendo-grid,kendo-datasource,Angularjs,Kendo Grid,Kendo Datasource,剑道格网对我来说是新的,所以我为我的无知道歉。我正在编写一个angular应用程序,它使用一个单独的服务来更新本地阵列。它存储在$scope.searchResults变量中。我已经使用dataSource->transport属性初始化了网格,希望当上面提到的数组更新时,dataSource和网格也会相应地更新。事实并非如此。阵列已更新,没有任何问题,但数据源从未更新。我将尽力粘贴下面的所有代码段和控制台输出 Html: 用于更新数据源的函数: dataSource: {

剑道格网对我来说是新的,所以我为我的无知道歉。我正在编写一个angular应用程序,它使用一个单独的服务来更新本地阵列。它存储在$scope.searchResults变量中。我已经使用dataSource->transport属性初始化了网格,希望当上面提到的数组更新时,dataSource和网格也会相应地更新。事实并非如此。阵列已更新,没有任何问题,但数据源从未更新。我将尽力粘贴下面的所有代码段和控制台输出

Html:

用于更新数据源的函数:

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);
            });
    }
现在控制台输出:

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]…}
O…e.e…d.init {options: Object, _map: Object, _prefetch: Object, _data: ObservableArray.extend.init[2], _pristineData: Array[2]…}
首次记录$scope.searchResults:

[Object, Object]
[Object]
第二次记录$scope.searchResults:

[Object, Object]
[Object]
第二次记录数据源:

O…e.e…d.init {options: Object, _map: Object, _prefetch: Object, _data: ObservableArray.extend.init[2], _pristineData: Array[2]…}
O…e.e…d.init {options: Object, _map: Object, _prefetch: Object, _data: ObservableArray.extend.init[2], _pristineData: Array[2]…}
请注意,在更新$scope.searchResults之前和之后,每个数据源的可观察数组长度均为2

如果需要的话,我可以深入到输出中去,但我不想让这篇文章变得势不可挡


谢谢

因为当网格最初绑定到选项对象时,通过将
k–options
指向选项对象来引用在选项对象内声明的数据,所以尚未填充数据。如果使用
k-data-source
单独引用数据源对象,它将绑定到数据源,并在数据源更改时更新网格。如果要更改选项对象触发重新渲染器,则需要使用
k–rebind
setOptions
方法。请务必阅读后者的文档,因为其中有一些警告。

我不知道为什么它会这样工作,但对于当前的项目配置,这就是解决方案

网格配置和更新数据源的功能在同一个模块中。网格本身在另一个控制器中初始化。我已经将用于更新的函数移动到包含网格的控制器,现在它可以完美地工作


如果有人知道原因,请随时插话。

您应该使用k-data-source来参考您的数据。