2016-08-08 3 views
2

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

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

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, предоставленной библиотекой, связанной выше, я был бы очень благодарен.

+0

'self.gridOptions' должны быть наблюдаемый, поэтому привязка данных будет знать, когда он был обновлен. После обновления члена вызовите 'self.gridOptions.valueHasMutated()'. Я просто основываю это на том, как вещи * должны * работать; Я не знаю, как работает привязка *. –

ответ

0

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

То, что я в конечном итоге делает был такой:

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

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