1. 程式人生 > >《kendoGrid》動態修改某一列的資料並呼叫save方法

《kendoGrid》動態修改某一列的資料並呼叫save方法

今天在專案中遇到一個問題,有需求需要去使用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中的有用屬性。