Обновление коллекции столбцов сетки Kendo UI, связанной с нокаутом

Я использую библиотеку Knockout-Kendo.js для привязки Kendo Grid с привязками Knockout. Я построил систему, которая загружает несколько источников данных, каждому из которых назначен свой набор столбцов. У меня все отлично работает, за исключением получения новой коллекции столбцов, назначенной сетке Kendo, связанной с Knockout.

Я прочитал несколько способов повторной инициализации столбцов, но все они требуют уничтожения и воссоздания сетки. Я не уверен, как бы я поступил с связанной сеткой Knockout. Я использую код ниже.

HTML:

<div data-bind="kendoGrid: gridOptions"></div>

Нокаут/JS:

self.SearchResults и self.GridColumns являются наблюдаемыми массивами.

self.gridOptions = {
    data: self.SearchResults,
    columns: self.GridColumns
};

Когда я обновляю self.SearchResults, сетка обновляется правильно. Обновление self.GridColumns не влияет на отображаемые столбцы в сетке.

Если кто-нибудь может указать мне правильное направление о том, как я могу обновить и отобразить коллекцию столбцов в сочетании с использованием привязки Knockout, предоставленной библиотекой, указанной выше, я был бы очень признателен.


person Sherman    schedule 08.08.2016    source источник
comment
self.gridOptions должен быть наблюдаемым, чтобы привязка данных знала, когда она была обновлена. После обновления члена позвоните self.gridOptions.valueHasMutated(). Я просто основываюсь на том, как все должно работать; Я не знаю, как на самом деле действительно работает привязка.   -  person Roy J    schedule 09.08.2016


Ответы (1)


Итак, я только что понял это. Оказалось очень просто.

В итоге я сделал следующее:

  1. Получить ссылку на сетку и текущие параметры сетки
  2. Назначьте обновленные self.GridColumns() вычисленные параметрам
  3. Установите параметры сетки на обновленные параметры

        var grid = $("#grid").data("kendoGrid");
        var options = grid.getOptions();
        options.columns = self.GridColumns();
        grid.setOptions(options);
    
person Sherman    schedule 09.08.2016