2013-03-28 2 views
3

У меня есть сетка кендо с столбцом, который использует combobox, который привязан к объекту под названием «Рабочий» (ID, «Имя пользователя»). Это прекрасно работает, за исключением случаев, когда пользователь устанавливает текст combobox в строку (пример: «xxxx»), которая не соответствует ни одному варианту выпадающего списка. Набор combobox устанавливает значение Worker в строку ('xxxx') вместо объекта Worker, после чего источник данных перестает отвечать на запросы, когда он получает искаженные данные.Kendo grid combobox отправляет неопределенные данные в DataSource

Я получил это, чтобы работать в событии «change» dataSource, которое запускается после события «Сохранить» сетки. Свойство нарушившей DataItem перезаписано с переменной myWorkerStart (захваченной в случае редактирования сетки в):

myDataSource.bind("change", function (e) { 
     if (e.field) { 
      if (e.field == "Worker") {   
       rowDataItem = myGrid.dataItem(myGrid.tbody.find("tr.k-grid-edit-row")); 
       var currentWorker = rowDataItem.Worker; 
       var myType = $.type(currentWorker); 
       if (myType != "object") { 
        alert('Ooooh, BAD worker, reverting to starting value'); 
        rowDataItem.set('Worker', myWorkerStart); 
       } 
      } 
     } 
     alert("datasource change"); 
}) 

Я видел эту тему в пару нитей на форумах Telerik, в основном без ответа. Поддержка Telerik сообщила мне, что я должен обращаться к неопределенным значениям в событии «Сохранить» сетки, но это срабатывает до того, как строка задана с помощью combobox. Я могу видеть значения, но я не уверен, где значения могут быть установлены для предотвращения отправки неопределенного значения в dataSource (контейнер, модель). Есть ли лучший способ обращения к искаженным данным до того, как будет отправлено неопределенное значение combobox к сетке?

myGrid.bind("save", function (e) { 
     myCombo = $('#Worker').data("kendoComboBox"); 
     rowDataItem = myGrid.dataItem(myGrid.tbody.find("tr.k-grid-edit-row"));   
     myPreviousWorker = e.model.Worker;//Worker previously 
     myNewWorker = myCombo.dataItem();//Worker about to be set by selected Combobox. 
     if (myNewWorker) { 
      alert("GOOD worker"); 
     } else { 
      alert("BAD worker"); 
     } 
     //Manipulate the combobox/container/model values 
}) 

ответ

2

Petur Subev был в состоянии обеспечить этот ответ: jsbin

В примере для сетки с «партии» сохранить, сетку в «Сохранить» проверку событий для неопределенного выбора в выпадающем списке, а затем связывает один раз (jquery .one()) к событию изменения модели, чтобы установить желаемое значение во время сохранения только в том случае, если выбор поля со списком не определен.

http://jsbin.com/edamuj/649/edit 


//grid configuration setup 
save:function(e){   
     if(!e.container.find('[data-role=combobox]').data().kendoComboBox.dataItem()) 
     { 
     e.model.one('change',function(e){ 
      this.set('test',{CategoryName:"Bevarages",CategoryID: "001"}) 
     }) 

     } 

     this.refresh(); 
    } 

Ниже пример для сетки без партии экономии (например инлайн редактирования) нужно только быть вызваны на сетке сохранить и не требует дополнительной привязки к модели изменения. Petur Другие jsbin

save:function(e){ 
     if(!e.container.find('[data-role=combobox]').data().kendoComboBox.dataItem()) 
     { 
      e.model.set('test',{CategoryName:"Bevarages",CategoryID: "001"}) 
     } 

     this.refresh(); 
    } 
Смежные вопросы