如何在删除期间覆盖jqGrid发送的id参数

时间:2018-02-22 08:45:42

标签: javascript jqgrid free-jqgrid

我正在使用free-jqGrid 4.14.1来显示在两列上具有复合ID的数据:idtype。由于jqGrid不支持组合键,因此我添加了一个名为uniqueId的字段,其中包含idtype的连接值:

$grid.jqGrid({
    url: /*ajaxListURL*/ '',
    editurl: /*ajaxActionURL*/ '',
    datatype: 'json',
    mtype: 'POST',
    loadonce: false,
    colModel: [
        {name: 'uniqueId', key: true, hidden: true}, //uniqueId=id+type
        {name: 'id', editable: true, hidden: true, editrules: {edithidden:true}, hidedlg: true},
        {name: 'type', editable: true, hidden: true, editrules: {edithidden:true}, hidedlg: true},
        {name: 'name', editable: true}
    ]
}).jqGrid('navGrid', '#pager', {edit: false, add: false, del: true}, {}, {}, { 
    onclickSubmit: function(options, delId){
        var rowData = $(this).jqGrid('getRowData', delId);
        return {
            id: rowData['id'],
            type: rowData['type']
        };
     }
}).jqGrid('inlineNav', '#pager', {add: false});

我的服务器需要idtype参数来编辑或删除记录。它无法处理解析uniqueId以便在没有我想要避免的后端重构的情况下提取id

为了使编辑工作,我使字段idtype可编辑和隐藏,这样jqGrid将在每次编辑记录时发送。 (这很好)

为了使删除工作,我实现了删除寻呼机选项的onclickSubmit方法,并手动将idtype值添加到postData。但是jqGrid会将id的值覆盖为uniqueId

以下是演示:https://jsfiddle.net/zohalexix/7wczzvur/

有没有在删除时发送id参数的实际id值(不重命名参数ID)?

1 个答案:

答案 0 :(得分:1)

您可以通过添加

来解决问题
prmNames: { id: "uniqueId" }

jqGrid的选项。它将通知jqGrid在编辑操作期间使用uniqueId而不是默认id来向服务器发送rowid。

此外,您还可以添加一个选项

jsonReader: { id: "uniqueId" }

并删除绝对不需要的隐藏列uniqueId。通常,每个隐藏的DOM元素都会降低页面的性能并增加Web浏览器使用的内存大小。

此外,我建议删除<div id="pager"></div>,使用pager: true代替pager: '#pager',并从'#pager和{{navGrid删除inlineNav参数1}}。通过使用navOptionsinlineNavOptionsformEditingformDeletingsearchinginlineEditing等,可以使代码更具可读性。请参阅{{3一个相应修改的例子。

最后,我建议您迁移到当前的4.15.3版本。我只支持最新版本的免费jqGrid。如果您在免费的jqGrid 4.14.1中找到一个例子,那么它将仅在最新的代码中修复(在4.15.4中)。