2017-06-02 118 views
2

我在手動設置/刪除Kendo網格控件上的「髒標誌」指示燈時遇到了問題。網格「髒」標誌沒有更新

我已經擴展了教程preserve dirty indicators以包括dataSource.change事件期間對value字段附加驗證:

  1. 以前保存value(其含有id),其已經被修改爲0 - 這一個有效的「髒標誌」(e.items[0].id > 0 && e.items[0].value === 0
  2. value已輸入與大於0的值 - 這是一個有效的「髒旗」(e.items[0].value > 0
  3. value任何其他實例不是一個有效的‘髒標誌’,因此應被刪除
  4. 如果用戶已離開value字段‘空白’,即‘空’,修改該值爲0(if (!e.items[0].value) {e.items[0].value = 0;}

隨着這些變化應用中,change事件現在看起來像:

change: function (e) { 
    if (e.action == "itemchange") {     
     if ((e.items[0].id > 0 && e.items[0].value === 0) || e.items[0].value > 0) { 
      e.items[0].dirtyFields = e.items[0].dirtyFields || {}; 
      e.items[0].dirtyFields[e.field] = true; 
      _dirty = true; 
     } 
     else { 
      if (!e.items[0].value) { 
       e.items[0].value = 0; 
      } 
      e.items[0].dirty = false; 
      e.items[0].dirtyFields = e.items[0].dirtyFields || {}; 
      e.items[0].dirtyFields[e.field] = false; 
     } 
     $("#grid").data("kendoGrid").refresh(); 
    } 
} 

ù在進行這些更改時,我可以看到dirtyField函數(它是值列的template)被觸發,並且還可以看到正在提供的適當值和正確的返回值(我認爲應該設置該值/刪除相應單元格中的「髒標誌」):

function dirtyField(data, fieldName){ 
    if(data.dirty && data.dirtyFields[fieldName]){ 
     return "<span class='k-dirty'></span>" 
    } 
    else{ 
     return ""; 
    } 
} 

但是,「髒標誌」不會被刪除,直到網格中的另一個單元格被修改。

這是一個Dojo example來演示這個問題。爲了複製:

  • 輸入一個大於0的值到第二行value小區(設置「髒標誌」)
  • 來自第二行value小區刪除值(「髒標誌」保留 - >現在應該基於change事件邏輯)消失
  • 輸入一個大於0的值到第三行value細胞(套「髒標誌」上當前小區,從第二行value小區)
刪除「髒標誌」

回答

1

在網格單元關閉之前調用您的DataSource.change事件。所以你刷新網格和單元格更改沒有正確反映在UI中。

您應該將網格刷新移動到網格cellClose事件。然後網格刷新將在單元格關閉後調用,並且一切正常。

$("#grid").kendoGrid({ 
    dataSource: dataSource, 
    sortable: true, 
    pageable: true, 
    navigatable: true, 
    height: 400,    
    columns: [ 
     { field: "value", title: "Value", editor: decimal_NumberEditor, format: '{0:n2}', attributes: { class: "editable-cell" }, template: "#=dirtyField(data,'value')# #:value#" }], 
    editable: true, 
    cellClose: function(e) { 
     $("#grid").data("kendoGrid").refresh(); 
    } 
}); 

這裏正在例如使用事件日誌記錄,這是怎麼回事的好understangind。見JS控制檯:

http://dojo.telerik.com/ICIxUX/7

+1

感謝@sasha_gud,演示工作正常。出於某種原因,我似乎無法觸發我的網格定義上的'cellClose()'事件。你知道這是否是一個版本問題('cellClose'僅適用於特定版本)/作爲一個衝突的網格屬性? **編輯**更改您發送的演示中控件的版本以匹配我自己的版本,並且確實與控件的版本有關。 – Sandman