2013-03-28 67 views
3

我有一個使用綁定到名爲'工作者'(ID,Workername)的對象的組合框的列的kendo網格。這可以正常工作,除非用戶將組合框文本設置爲與任何下拉選項不匹配的字符串(例如:'xxxx')。組合框設置Worker的值爲一個字符串('xxxx')而不是一個Worker對象,此時dataSource在接收到格式錯誤的數據時停止響應。劍道網格組合框發送未定義的數據到DataSource

我已經得到了這個在dataSource'change'事件中工作,它在網格的'save'事件之後觸發。違規的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支持告訴我,我應該在網格的「保存」事件中解決未定義的值,但是在該行由組合框設置之前觸發。我可以看到這些值,但我不確定可以設置值的位置以防止將未定義的值發送到dataSource(容器,模型)有沒有更好的方法來在未定義的組合框值發送之前解決格式錯誤的數據到電網?

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能夠提供這樣的回答:與「批」節約,電網的「保存」事件檢查ComboBox中未定義選擇網格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(); 
    }