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 セクションのポストデータの準備にあると推測していますが、単一のレコードではなくレコードのリストを使用してこのポストデータを準備する正しい方法が見つかりませんでした。

任意の提案/洞察をいただければ幸いです。

皆さんありがとう。

4

1 に答える 1

2

私自身はSpringを使用していませんが、コードの継ぎ目の一部が私にとって奇妙です.

まず、コードでdelGridRow( ) の最初のパラメーターの 2 つの形式を使用できます。rowID のコンマ区切りリストまたは ID の配列のいずれかです。ID の配列を使用する場合、jqGrid はそれをrowids = rowids.join();. その結果、postdata.idinside ofの形式はserializeDelData 、ID のコンマ区切りリストにすることもできます。

したがって、複数行の削除をサポートする必要がある場合は、

  1. のコードを変更して、 のリストもプロパティserializeDelDataに送信します。対応するコードは次のとおりです。reqIDreqID
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コールバックによって返される配列の最初の 2 つの要素のみが使用されるためです。

于 2012-04-26T19:33:54.510 に答える