2012-04-24 9 views
0

現在、私はこのようになりますオーバーライドさdelGridRowコール(Kramsと彼の春のチュートリアルのクレジット)があります。複数選択削除のためのサポートを追加するためにjqGrid、マルチセレクション、および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, ... 

が、私はまだ私の春のコントローラで私deleteRequirement.html URLを打つんだけど、唯一の最後のレコードがそれを作るように見えます。私は、問題は、serializeDelDataセクションのpostdataの準備にあると思っていますが、私はレコードのリストではなく、単一のレコードのこのpostdataを準備する正しい方法が見つかりませんでした。

提案/洞察力があれば幸いです。

ありがとうございます。

答えて

2

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

最初に、delGridRowrow)の2つの形式を使用することができます。コンマで区切られたidsのリストまたはidsの配列のいずれかです。 idsの配列を使用する場合は、jqGridをコンマで区切った形式に変換します(rowids = rowids.join();)。その結果、postdata.idの形式がserializeDelDataの場合、コンマで区切られたIDのリストになります。

あなたが複数の行の削除をサポートする必要があるのであれば、あなたは

  1. reqIDプロパティでreqIDのリストを送信するためにserializeDelDataのコードを変更する必要があります。対応するコードは
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の両方をサポートするようにサーバーコードを変更することができます。

配列の最初の2つの要素のみがafterSubmitコールバック意志によって返されたので、あなたは、次の

return [result.success, errors]; 

にラインを変更することができますあなたのライン

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

afterSubmitコールバックの内部利用される。

+0

私のサーバーは、私が削除しようとしているレコードIDの代わりに、「間違っている」と誤ってpostdataを取得しています。 代わりに、デフォルトのjqGrid delRowData呼び出しを使用し、別々に使用する(または、おそらくonClickSubmit呼び出しでAJAX呼び出しを呼び出して選択した行をサーバーに送信する)でしょうか? – Raevik

+0

@Brent:問題をデバッグする必要があります。まず、 'alert(postdata.id);'と 'alert(reqIDList.join());'を返す前に 'serializeDelData'に含める必要があります。ちなみに、**最後の**バージョンのjqGridを使用しますか?そうでなければ '$(this).jqGrid(" getCell "、ids [i]、" reqID ")'を '$("#grid ")に置き換えてください。jqGrid(" getCell "、ids [i]、" reqID ")'。 – Oleg

+0

したがって、postdata.id呼び出しが、レコード自体からのreqID値ではなく、ページ番号付けされたjqGridモデルIDを取得しているようです。おそらくgetRowDataコールが適切な値を取得する必要があります... 想像しているように、行58をサーバーに渡すことは、データレコードの実際のUID(この場合はreqID)ではなく、 。 アラートが生成されました:(58,59)および(false、false) 私は最新バージョンを使用していますが、とにかく$( "#grid")を実行しています。私はプッシュコールから間違った偽りが来ているのが不思議です。仕様ではrowIDとcolumnが必要だと言われています。 – Raevik

関連する問題