《kendoGrid》動態修改某一列的資料並呼叫save方法
阿新 • • 發佈:2019-02-09
今天在專案中遇到一個問題,有需求需要去使用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中的有用屬性。