今天在项目中遇到一个问题,有需求需要去使用js动态的修改KendoUI Grid的某一列数据,并保存到数据库,一开始我是这样写的:
var dataGrid = $("#grid").data("kendoGrid");
var data = dataGrid._data;
var messageList = [];
if (data.length == 0) {
kendo.ui.showInfoDialog({
message: "没有模板"
});
}else{
for(var i = 0; i < data.length; i++){
//动态修改sendTime
data[i] .sendTime = curentTime();
messageList.push({"templateId":data[i].templateId,
"messageReceiverId":data[i].messageReceiverId,
"whetherChange":"否",
"templateName":data[i].templateName,
"receiverType":data[i].receiverType,
"receiverName":data[i].receiverName
});
}
dataGrid.refresh();
dataGrid.saveChanges();
然后调用grid中的saveChanges()方法去保存,然而发现怎么样都保存不到数据库,单步调试之后发现根本没有请求到controller中去,前端debugger也可以发现数据确实是已经被修改了,后来突发奇想,当我修改grid中的数据时,前端grid并没有显示被修改的红色小三角,也就是说grid没有把修改的数据认定为是“修改过”的数据,后来想起了之前看到的脏数据的概念,到前端debugger后watch(监视)grid中的数据,发现果然有一个属性名为'dirty',而且在我动态修改后,dirty属性仍然为false,就被认定为未修改,然后我在修改sendTime值的后面添加这样一句代码:
data[i].dirty = true;
问题解决。
tips:在前端进行debugger时,发现了许多kendoGrid中的有用属性。