Jquery 免费jqGrid 4.9.0-如何获取行的内联编辑的原始值

Jquery 免费jqGrid 4.9.0-如何获取行的内联编辑的原始值,jquery,jqgrid,free-jqgrid,Jquery,Jqgrid,Free Jqgrid,我目前正在尝试对网格中的给定行进行内联编辑。由于双击会打开给定行上所有“可编辑”的列,“保存”操作会将要更新的全部值发送回服务器,而不仅仅是那些实际更改的值 为了不发送服务器冗余更新,我想“比较”更新前后的值。因此,我只能向服务器发送实际更改的列 实现这一点的最佳方法是什么,以及如何获取原始行值以进行比较 谢谢,我觉得这个问题很有趣。我在下面发布了一个实现您的需求的示例。我在普通情况下编写这个问题并不是为了让代码稍微短一点。我建议您定义内联编辑使用的serializeSaveData回调。您可以

我目前正在尝试对网格中的给定行进行内联编辑。由于双击会打开给定行上所有“可编辑”的列,“保存”操作会将要更新的全部值发送回服务器,而不仅仅是那些实际更改的值

为了不发送服务器冗余更新,我想“比较”更新前后的值。因此,我只能向服务器发送实际更改的列

实现这一点的最佳方法是什么,以及如何获取原始行值以进行比较


谢谢,我觉得这个问题很有趣。我在下面发布了一个实现您的需求的示例。我在普通情况下编写这个问题并不是为了让代码稍微短一点。我建议您定义内联编辑使用的
serializeSaveData
回调。您可以在网格的
inlineEditing
参数中指定它,例如(请参阅):

内联编辑:{
serializeSaveData:函数(postData){
var data=$.extend({},postData),//复制输入数据
p=$(this).jqGrid(“getGridParam”),
savedRow=p.savedRow,iColByName=p.iColByName,colModel=p.colModel,
i、 l=savedRow.length,prop,oldData,cm,iCol,v;
对于(i=0;i

上面的代码检查编辑后将发送到服务器的数据,并删除所有未修改的属性。服务器代码当然不能将数据解释为
NULL
值。

我觉得这个问题很有趣。我在下面发布了一个实现您的需求的示例。我在普通情况下编写这个问题并不是为了让代码稍微短一点。我建议您定义内联编辑使用的
serializeSaveData
回调。您可以在网格的
inlineEditing
参数中指定它,例如(请参阅):

内联编辑:{
serializeSaveData:函数(postData){
var data=$.extend({},postData),//复制输入数据
p=$(this).jqGrid(“getGridParam”),
savedRow=p.savedRow,iColByName=p.iColByName,colModel=p.colModel,
i、 l=savedRow.length,prop,oldData,cm,iCol,v;
对于(i=0;i

上面的代码检查编辑后将发送到服务器的数据,并删除所有未修改的属性。当然,服务器代码不应该将数据解释为
NULL
值。

谢谢,我需要学习,因为我看到您添加了一些很酷的新选项。何时调用SerializedSaveData?看来我不能把它执行了。试图提醒(1)它,也没有做太多。表单编辑:{savekey:[true,13],closeOnEscape:true,closeAfterEdit:true,closeAfterEdit:true},ActionsAvoptions:{editformbutton:true},InlineEdit:{keys:true,SerializedSaveData:function(postData){alert(1);@Tal:
serializeSaveData
将在发出Ajax请求将数据保存到服务器之前被调用。请参阅或。可能没有调用它,因为我在实现中使用了回调保存函数。在这种情况下,我可能只是在onRowSelect过程中获取原始行,并从实现中对其进行迭代n我在回拨中有。@Tal:如果你想让我帮你找到问题,你应该发布你的代码。我测试了我发布的代码。它使用HTTP GET而不是post来保存编辑的数据,但是你可以使用IE/Chrome的开发人员工具来查看在保存URL时会附加什么。一
inlineEditing: {
    serializeSaveData: function (postData) {
        var data = $.extend({}, postData), // make copy of input data
            p = $(this).jqGrid("getGridParam"),
            savedRow = p.savedRow, iColByName = p.iColByName, colModel = p.colModel,
            i, l = savedRow.length, prop, oldData, cm, iCol, v;
        for (i = 0; i < l ; i++) {
            // below we suppose that idname of postData is deafult - id
            // to make the code more simple.
            // One can use p.prmNames.oper or p.keyName in more common case
            if (savedRow[i].id === postData.id) {
                oldData = savedRow[i];
                for (prop in oldData) {
                    if (oldData.hasOwnProperty(prop)) {
                        iCol = iColByName[prop];
                        if (iCol !== undefined && colModel[iCol] != null) {
                            cm = colModel[iCol];
                            v = oldData[prop];
                            if (cm.formatter === "date" && (cm.formatoptions || {}).sendFormatted !== true) {
                                v = $.unformat.date.call(this, v, cm);
                            }
                            if (v === data[prop]) {
                                delete data[prop];
                            }
                        }
                    }
                }
            }
        }
        return data; // object with oper, id and modified propertied
    }
}