Источник данных Kendo Grid никогда не обновляется

Kendo Grid для меня новичок, поэтому прошу прощения за невежество. Я пишу угловое приложение, которое использует отдельную службу для обновления локального массива. Он хранится в переменной $scope.searchResults. Я инициализировал сетку с помощью свойства dataSource ->transport в надежде, что при обновлении упомянутого выше массива источник данных и сетка также будут обновлены соответствующим образом. Это не тот случай. Массив обновляется без проблем, но источник данных никогда не обновляется. Я сделаю все возможное, чтобы вставить все фрагменты кода и вывод консоли ниже.

HTML:

<div class="margin-top-25" ng-show="searchResults">
    <div id="report-grid" kendo-grid="grid" options="mainGridOptions"></div>
</div>

Исходный источник данных конфигурации Grid:

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]…}

Обратите внимание, что каждый источник данных имеет наблюдаемую длину массива, равную 2, до и после обновления $scope.searchResults.

Я могу углубиться в вывод, если это необходимо, но не хотел, чтобы этот пост стал перегруженным.

Спасибо!


person unsingefou    schedule 07.10.2015    source источник
comment
Вы должны использовать k-data-source для ссылки на свои данные.   -  person hally9k    schedule 07.10.2015


Ответы (2)


Поскольку вы ссылаетесь на свои данные, которые объявлены внутри вашего объекта параметров, указывая k–options на ваш объект параметров, когда сетка изначально привязывается к объекту параметров, он еще не заполнен данными. Если вы отдельно сошлетесь на свой объект источника данных, используя k-data-source, он будет привязан к вашему источнику данных и обновит вашу сетку при изменении источника данных. Если вы хотите внести изменения в свой объект параметров, чтобы вызвать повторную визуализацию, вам нужно использовать k–rebind или, альтернативно, метод setOptions. Обязательно прочитайте документы для последнего, так как есть некоторые предостережения.

person hally9k    schedule 07.10.2015

Ну, я не знаю, почему это работает так, как есть, но с текущей конфигурацией проекта это решение.

Конфигурация сетки и функция обновления источника данных находятся в одном модуле. Сама сетка инициализируется в другом контроллере. Я переместил функцию обновления в контроллер, содержащий сетку, и теперь она работает отлично.

Если кто знает почему, отпишитесь.

person unsingefou    schedule 08.10.2015