2012-04-09 19 views
2

これは私のjqGridハンドラです。jqGridのインライン編集でajaxリクエストにカスタムパラメータを渡す方法

var myEditParams = { 
    keys: true, 
    extraparam: { 
     ajax: function() { 
      alert("in myEditParams:extraparam"); 
      return "1"; 
     } 
    } 
}; 
var lastsel; 
jQuery("#list2").jqGrid({ 
     data: data, 
     height: 250, 
     emptyDataText: "No Records Found", 
     width: $('#mainwrapper').width(), 
     datatype: "local",   
     colNames:['Table Description','Display Table name'], 
     colModel:[ 
      { name:'table_desc', index:'table_desc', sortable: false, align: 'left', editable: true, edittype: 'text', editoptions:{ size:40 }, formatoptions:{ 
       keys: true, 
       editOptions: myEditParams 
      } }, 
      { name:'display_table_name',index:'display_table_name', sortable: false } 
     ], 
     loadComplete: function(){ 
      $('.ui-jqgrid-htable').css('width',$('#mainwrapper').width()+'px'); 
      if ($('#list2').getGridParam('records') == 0){ // are there any records? 
       DisplayEmptyText(true); 
      }else{ 
       DisplayEmptyText(false); 
      }      
     }, 
     rowNum:10, 
     rowList:[10,20,30], 
     pager: '#pager2', 
     sortname: 'id', 
     viewrecords: true, 
     sortorder: "desc", 
     caption:"Changelog Tables", 
     postData: { ajax: "1" }, 
     onSelectRow: function(id){ 
      if(id && id!==lastsel){ 
       jQuery('#list2').jqGrid('restoreRow',lastsel); 
       jQuery('#list2').jqGrid('editRow',id,true); 
       $('#list2').jqGrid('setGridParam',id,{ ajax:"1" }); //wanted to set some custom params here. 
       lastsel=id; 
      } 
     }, 
     editurl: "changeLog.php" 
    }); 

私はいくつかのインプレース編集操作を行う際に、AJAX = 1として、1つの余分のparamを送りたいです。私はあらゆる方法で試しました。しかし、何も動作していないようです。私はほとんど挫折している。

私はこれを試してみました:

$("#list2").jqGrid('setGridParam',{postData:{ajax:'1'}}); 

は動作しませんでした。また、ハンドラに表示されるように、postDataパラメータを設定しようとしました。それも機能していません。ここで何がうまくいかないのですか?これで助けてください

答えて

3

editRowextraparamをサポートしています。だから、そうonSelectRowを書き換えることができます。

onSelectRow: function (id) { 
    var $myGrid = $(this); // it's better as jQuery('#list2') 
    if (id && id !== lastsel) { 
     $myGrid.jqGrid('restoreRow', lastsel); 
     $myGrid.jqGrid('editRow', id, { 
      keys: true, 
      extraparam: { ajax: "1" } 
     }); 
     lastsel = id; 
    } 
} 

あなたの代わりにextraparamのプロパティのメソッド(関数)を使用することができますちなみに。それは次のような場合にはうっ血になることがあります。 extraparam: { ajax: $("#myControl").val() }のような値は、editRow関数の呼び出しの時点で計算されます。 extraparam: { ajax: function() { return $("#myControl").val(); } }を使用する場合、ajaxパラメータの値は、の値を保存する時点で評価されます。現時点では、$("#myControl").val()は別の値を持つことができます。

+0

これでもうまくいきませんでした。私は全く混乱している。どのソリューションがどのように機能していますか? – Shades88

+0

@ Shades88:[回答]から[デモ](http://www.ok-soft-gmbh.com/jqGrid/SendDataFromInlineNav1.htm)を見てください。 「追加」ボタンをクリックして何かを保存しようとします。 'exraparam'の関数が呼び出されます。 [回答](http://stackoverflow.com/a/8512693/315935)の[別のデモ](http://www.ok-soft-gmbh.com/jqGrid/inlineDataAsFunction.htm)をご覧ください。それも動作します。結局、デモとあなたのコードを比較することができます。 – Oleg

+0

ok更新されたコードを確認してください。私はあなたのデモを見ることで変更を加えましたが、まだ動作していません – Shades88

関連する問題