我正在研究kendo网格上的功能。有一个表,每个行都有一个复选框,有一个Select All
选项检查所有复选框,并且该Select All
选项旁边有一个按钮到Update All
行,当您单击Update All
时,它将更新所选行的Status
在网格中,但尚未在数据库上进行更新。要更新数据库上的这些行,您必须单击Save Changes
按钮。我遇到的问题是,当我单击Update All
按钮时,性能非常慢,超过100行,我知道为什么,在Javascript
中,这是使步骤非常慢的代码:
var items = $('#grid').data().kendoGrid.dataSource.data();
$.each(selectedRows, function (index, r) {
var indexOf = rows.indexOf(r);
var item = items[indexOf];
item.set('STATUS', status); //This line of code is very slow for more than 100 records
});
因此,当有超过300个记录镀铬变得无反应时,使用集合方法确实使此过程变得更慢。所以我对此进行了更改:
var items = $('#grid').data().kendoGrid.dataSource.data();
$.each(selectedRows, function (index, r) {
var indexOf = rows.indexOf(r);
var item = items[indexOf];
item.STATUS = status; //It works fast now
});
kendoGrid.refresh();
网格在前端上正确更新,但是当我单击Save Changes
时,应将这些记录保存在数据库中的控制器未被调用,这是因为当我使用最后一个stytax时,未检测到Status
列的更改..
item.set('STATUS', status);
和
item.STATUS = status;
kendoGrid.refresh();
为什么在第二步中,使用set()
方法将行保存到数据库中,但是当我使用item.STATUS = status;
并单击Save Changes
时,具有更改的行不会在请求上发送?
,所以我找到了这个答案:https://stackoverflow.com/a/20959758/5614045并像这样更新了我的语法:
var items = $('#grid').data().kendoGrid.dataSource.data();
$.each(selectedRows, function (index, r) {
var indexOf = rows.indexOf(r);
var item = items[indexOf];
item.STATUS = status; //It works fast now
item.dirty = true; //Added this line of code.
});
kendoGrid.refresh();
现在可以正常工作,显然有一个dirty
标志,该标志将设置为true,这意味着项目已更改...