Kendo Grid:删除脏电池指示器

pet*_*erc 3 kendo-ui kendo-grid

我一直在寻找一种方法,当用户更改为另一行时(就像在Access,SQL Management Studio等中一样),可以自动保存客户端编辑的网格数据。这确实似乎是一个挑战。

一种方案是使用数据源同步,但这是丢失单元格位置的问题(它总是跳到单元格0,0)。

我已经看到了一些巧妙的解决方法(案件返回到牢房,顺便说一句,非常感谢,谢谢),但是经过一些长时间的测试(由我本人和其他人),它似乎有点“浮躁”(也许我只需要做更多的工作)

无论如何,我想探索也许不使用此数据源同步,也许只是做服务器端“手动”调用(这有点可惜,但是如果那是我们需要做的,就这样)。如果执行此操作,我将要重置单元格小红色单元格“脏”指示器。

我以为我可以使用类似于此方案的东西 (除了要重置标志,我要取消设置)。

因此,如上述链接所示,我有以下内容:

 var pendingChanges = [];

 function gridEdit(e) {
   var cellHeader = $("#gridID").find("th[data-field='" + e.field + "']");
   if (cellHeader[0] != undefined) {
      var pendingChange = new Object();         
     pendingChange.PropertyName = e.field;        
     pendingChange.ColumnIndex = cellHeader[0].cellIndex;        
     pendingChange.uid = e.items[0].uid;
     pendingChanges.push(pendingChange);
    }
   }
Run Code Online (Sandbox Code Playgroud)

我们从数据源更改中调用gridEdit的位置。

var dataSrc = new kendo.data.DataSource({
change: function (e) {
  gridEdit(e);
},
Run Code Online (Sandbox Code Playgroud)

现在假设我们有一个检测行更改的回调,我想我可以做以下事情...

// clear cell property (red indicator)
for (var i = 0; i < pendingChanges.length; i++) {
  var row = grid.tbody.find("tr[data-uid='" + pendingChanges[i].uid + "']");
  var cell = row.find("td:eq(" + pendingChanges[i].ColumnIndex + ")");

  if (cell.hasClass("k-dirty-cell")) {
    cell.removeClass("k-dirty-cell");

    console.log("removed dirty class");
  }
}

pendingChanges.length = 0;

// No good, we loose current cell again! (sigh..)
//grid.refresh();
Run Code Online (Sandbox Code Playgroud)

当此操作不起作用时,我还尝试重置数据源脏标志。

// clear dirty flag from the database
var dirtyRows = $.grep(vm.gridData.view(),
  function (item) {
    return item.dirty == true;
  })

if (dirtyRows && dirtyRows.length > 0) {
  dirtyRows[0].dirty = false;
}
Run Code Online (Sandbox Code Playgroud)

在这里演示

在上述方法均无效后,我尝试了grid.refresh(),但这与数据源同步存在相同的问题(我们松开了当前单元格)

有人会知道如何清除该单元格指示器,而不刷新似乎完全失去我们编辑上下文的整个网格吗?

在此先感谢您的帮助!

sof*_*com 5

CSS:

.k-dirty-clear {
  border-width:0;
}
Run Code Online (Sandbox Code Playgroud)

网格编辑事件:

  edit: function(e) {
    $("#grid .k-dirty").addClass("k-dirty-clear"); //Clear indicators
    $("#grid .k-dirty").removeClass("k-dirty-clear"); //Show indicators
  }
Run Code Online (Sandbox Code Playgroud)

http://jsbin.com/celajewuwe/2/edit