Kendo Grid数据源永远不会更新

时间:2015-10-07 18:18:56

标签: angularjs kendo-grid kendo-datasource

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。

如果需要,我可以深入查看输出,但不希望这篇文章变得势不可挡。

谢谢!

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

好吧,我不知道它为什么会按原样运行,但是使用当前的项目配置,这就是解决方案。

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

如果有人知道原因,请随意加入。