2013-06-18 2 views
1

Ситуация: я расширил сетку, и добавил OnKeyDown событие для прослушивания вкладки или стрелки, whcih позволит пользователю перейти к следующему «редактируемые "ячейка. Я делаю это с помощью ...KendoUI MVVM Binding вручную обновить источник от отображаемого значения

var grid = $("#" + that.gridId).data('kendoMyExtension'); 
grid.closeCell(currentCell); 
grid.editCell(desiredCell); 

Текущее поведение: он работает, как ожидалось, однако, когда клетка закрывается, она не сохраняет данные (через правильное связывание) с ViewModel.Field к который он связан. ... Однако IFF вы нажимаете кнопку ввода после внесения изменений, вы сохраните изменения.

Что я пробовал: вручную делают обновление, прежде чем я сделать изменения фокуса (и выпалить все то другое кендо лакомства редактирования) с помощью

однако они не работают. и обычно заканчивают тем, что бросают неопределенную ошибку где-то в недрах кендо.

Что я хочу:

В идеале кендо будет поставлять по крайней мере один MVVM и кендо пример расширения (для сетки), которая имеет все функциональные возможности, событие и т.д. будучи связанным .. но .. так Вероятно, я не получу эту просьбу. Я соглашусь:

  1. Где кендо «хранит» изменения?
  2. Какой метод используется для фактического вызова обновления {для привязки MVVM NOT dataSource}.
  3. Я пропустил ключевое слово привязки в духе {one-way, two-way}?
  4. Является ли кендо на основе нокаута. Могу ли я использовать методы нокаута, чтобы обойти проблемы, которые у меня возникают с кендо.

Есть также много других модификации отображения логики на этой сетке .. Я использую шаблон, чтобы определить, если ячейка должна быть редактируемой, шаблон, чтобы определить, что должно быть вынесено в nonedit & и некоторые логические схемы IOC для подключения к внутренней линии ... (FYI)

ответ

1

ok после перехода через кендо я нашел проблемы ... у моего источника данных не было читателя (и это не должно быть afik), поэтому синхронизация и saveRow не будут работать надежно.


Вы должны убедиться, что строка помечается как «к-редактирования-строки» в шаблоне редактирования:

{your edit template selector}.closest('tr').addClass("k-grid-edit-row"); 

, если вы хотите получить saveRow работать, однако в моем случае это был ненадежным (он работал бы только, если бы я шагнул через код, иначе терпеть неудачу каждый раз ... Я понятия не имею, почему даже пытался использовать популярный «setTimeout (...)» ....) в конечном итоге это то, что я закончил:

myOnKeyDown:function(e){ 
    var cell = $(e.target).closest("td")[0]; 
    var row = $(e.target).closest("tr")[0]; 
    if (cell != undefined) { 
     that.forceSync(cell, row, e.target.value); 
    } 
}, 


forceSync: function (cell, row, value){ 
    /// this is in the extension scope ///// 
    /// Note that this uses functions in the dataSource Scope! /// 
    var cellFieldName = cell.kendoBindingTarget.target.options.fields.field; 
    var cellRecordUid = row.getAttribute('data-uid'); 
    var that = $("#" + this.gridId).data('kendoMyExtension').dataSource, idx, length; 
    var data = that._flatData(that._data); 
     for (idx = 0, length = data.length; idx < length; idx++) { 
      if(data[idx].uid ===cellRecordUid){ 
       data[idx][cellFieldName] = value; 
      } 
     } 
    }, 

... ну после значительного количества времени, потраченного на это, я почувствовал, что кому-то еще нужно воспользоваться ...

Действительно надеется, что это поможет кому-то еще.