目前,我有一个被覆盖的delGridRow调用看起来像这样(归功于Krams和他的Spring教程):
var row = $('#grid').jqGrid('getGridParam','selrow');
$('#grid').jqGrid( 'delGridRow', row,
{ url:'deleteRequirement.html',
recreateForm: true,
beforeShowForm: function(form) {
//Change title
$(".delmsg").replaceWith('<span style="white-space: pre;">' +
'Delete selected record?' + '</span>');
//hide arrows
$('#pData').hide();
$('#nData').hide();
},
reloadAfterSubmit:true,
closeAfterDelete: true,
serializeDelData: function (postdata) {
var rowdata = $('#grid').getRowData(postdata.id);
// append postdata with any information
return {id: postdata.id, oper: postdata.oper, reqID: rowdata.reqID};
},
afterSubmit : function(response, postdata)
{
var result = eval('(' + response.responseText + ')');
var errors = "";
if (result.success == false) {
for (var i = 0; i < result.message.length; i++) {
errors += result.message[i] + "<br/>";
}
} else {
$('#msgbox').text('Entry has been deleted successfully');
$('#msgbox').dialog(
{ title: 'Success',
modal: true,
buttons: {"Ok": function() {
$(this).dialog("close");
}
}
});
}
// only used for adding new records
var newId = null;
return [result.success, errors, newId];
}
});
else {
$('#msgbox').text('You must select a record first!');
$('#msgbox').dialog(
{ title: 'Error',
modal: true,
buttons: {"Ok": function() {
$(this).dialog("close");}
}
});
}
为了增加对多选删除的支持,我将“selrow”第一行更改为:
var rowList = jQuery("#grid").getGridParam('selarrrow');
在此之后,事情开始变得粗略。规范说默认的delGridRow可以接受要删除的输入记录数组。我做了以下更改以尝试获取新的'rowList'变量:
$('#grid').jqGrid( 'delGridRow', rowList, ...
我仍在我的Spring控制器中点击我的deleteRequirement.html网址,但只有最后的记录才能显示出来。我猜测问题出现在serializeDelData部分的postdata准备中,但是我没有找到正确的方法来准备这个postdata与记录列表而不是单个记录。
任何建议/见解都将受到赞赏。
谢谢大家。
答案 0 :(得分:2)
我自己不使用Spring,但代码接缝的某些部分对我来说很奇怪。
首先,您可以在代码中使用delGridRow
(row
的第一个参数的两种形式。它可以是以逗号分隔的id列表,也可以是id数组。如果使用id数组,则jqGrid会将其rowids = rowids.join();
转换为逗号分隔格式。因此,postdata.id
内的serializeDelData
格式也可以是以逗号分隔的ID列表。
因此,如果您需要支持删除多行,您应该
serializeDelData
的代码,以便在reqID
属性中发送reqID
的列表。相应的代码可以是serializeDelData: function (postdata) {
var ids = postdata.id.split(','), i, l = ids.length, reqIDList = [];
for (i = 0; i < l; i++) {
reqIDList.push($(this).jqGrid("getCell", ids[i], "reqID"));
}
return {id: postdata.id, oper: postdata.oper, reqID: reqIDList.join()};
}
id
和reqID
。在afterSubmit
内回调你的行
// only used for adding new records
var newId = null;
return [result.success, errors, newId];
您可以将行修改为以下
return [result.success, errors];
因为只会使用afterSubmit
回调返回的数组的前两个元素。