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–rebindsetOptions 方法。请务必阅读后者的文档,因为有一些注意事项。

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

网格配置和更新数据源的函数在同一个模块中。网格本身在另一个控制器中初始化。我已将更新功能移至包含网格的控制器,现在它可以正常工作了。

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