0

目前,我有一个覆盖的 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 URL,但似乎只有最后一条记录可以做到。我猜问题出在 serializeDelData 部分的 postdata 准备中,但我还没有找到正确的方法来使用记录列表而不是单个记录来准备这个 postdata。

任何建议/见解将不胜感激。

谢谢大家。

4

1 回答 1

2

我自己不使用 Spring,但是您的代码接缝的某些部分对我来说很奇怪。

首先,您可以使用delGridRow(row在您的代码中) 的第一个参数的两种形式。它可以是逗号分隔的 id 列表或 id 数组。如果您使用 id 数组,则 jqGrid 将其转换为逗号分隔的格式rowids = rowids.join();。因此postdata.idinside of的格式serializeDelData 也可以是逗号分隔的 id 列表。

因此,如果您需要支持删除多行,您应该

  1. 修改代码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()};
}
  1. 修改您的服务器代码以支持逗号分隔idreqID形式。

里面afterSubmit回调你你的线

// only used for adding new records
var newId = null;
return [result.success, errors, newId];

您可以将这些行修改为以下内容

return [result.success, errors];

因为只会afterSubmit使用回调返回的数组的前两个元素。

于 2012-04-26T19:33:54.510 回答