$(document).ready(function () {
$("#jqGrid").jqGrid({
url: 'path_url?action=ajax.load',
editurl: 'path_url',
datatype: "json",
colModel: [ {
label: 'Actions',
width: '10em',
formatter: 'actions',
editable: false,
sortable: false
}, {
label: 'Network',
name: 'network',
width: '20em',
key: true,
editable: true,
editrules : { required: true}
}, {
...
}, {
label: 'Comment',
name: 'comment',
editable: true,
sortable: false
} ],
autowidth: true,
gridview: true,
prmNames: { oper: "action",
editoper: "ajax.update",
addoper: "ajax.add",
deloper: "ajax.delete"
},
sortname: 'network',
sortorder : 'asc',
viewrecords: true,
height: 'auto',
rowNum: 10000,
pager: "#jqGridPager"
});
...
点击删除按钮时,POST数据包含要删除的记录的“ id = 值”:
vars {
action = 'ajax.delete'
id = '129.186.0.0'
}
当编辑按钮用于编辑行时,使用保存按钮时,POST数据不包含它,我只获得新值:
vars {
action = 'ajax.update'
comment = 'note goes here'
netmask = '255.255.0.0'
nettype = '1'
network = '1.4.0.0'
}
id = '192.188.159.0' /* missing! the old value of the key field */
我能够在saveRow()
中破解来源“修复”这个(在第12206行):
if(tmp) {
tmp[opers.oper] = opers.editoper;
tmp[opers.id] = oldRowId; /* added, --john */
if (tmp[idname] === undefined || tmp[idname]==="") {
...
但肯定有一种正确的方法可以解决这个问题吗?
答案 0 :(得分:0)
根据@ Oleg的评论,答案如下:
我的数据来源未包含 id 字段:
"rows": [
{"network": "1.2.0.0", "netmask": "255.255.0.0", "nettype": "1", "comment": "huh" },
...
]
有两个修复方法。一种是按照建议包含jsonReader: { id: "network" }
选项,它将合成id。另一种方法是修复数据源以包含id:
"rows": [
{"id": "1.2.0.0", "network": "1.2.0.0", "netmask": "255.255.0.0", "nettype": "1", "comment": "huh" },
...
]
在这两种情况下,都不再需要key: true
选项。
[编辑] 注意:拥有一个不可变的 id 是一件好事,(而不是影响可编辑字段的那个) ) - 在这种特殊情况下,这不是我可以使用的东西。