2017-10-04 5 views
1

ログを保存した後にグリッドをリロードしようとすると、ロギング目的の行のIDを取得できるようになりましたが、 'aftersavefunc'と 'successfunc'保存する前にreloadGrid( '#telephoneGrid')を起動します。 'aftersavefunc'と 'successfunc'は同一であるようです。今では、行の追加や編集はできません。'saveRow'の前に 'aftersavefunc'と 'successfunc'が発生する

var lastSel; 

    function onTelephoneSelect(id, status, e) { 

     if ($(e.target).hasClass('edit')) { 
      var editParameters = getEditParameters(); 
      if (id && id !== lastSel) { 
       jQuery('#telephoneGrid').saveRow(lastSel); 
      } 
      jQuery("#telephoneGrid").jqGrid('editRow', id, editParameters); 
      lastSel = id; 
     } 
    } 

    function getEditParameters() { 
     return { 
      "keys": true, 
      "oneditfunc": null, 
      "successfunc": null, 
      "url": '@Url.Action("SaveTelephoneEntry","TelephoneEntry")?customerId=' + $('#SelectCompany').val(), 
      "extraparam": {}, 
      "aftersavefunc": reloadGrid('#telephoneGrid'), 
      "errorfunc": null, 
      "afterrestorefunc": null, 
      "restoreAfterError": true, 
      "mtype": "POST" 
     } 
    } 

私は今、かなり絶望的だし、任意の実用的なソリューションを見つけ出すことができませんでした。

誰かが私をここで助けてくれるのでしょうか、すでに同じ問題に直面していて、解決策を見つけましたか?

事前に感謝します。

+0

すべての最初に、常にあなたが使用jqGridのバージョン**、と**フォーク**についての情報を記載してください* *([free jqGrid](https://github.com/free-jqgrid/jqGrid)、商用の[Guriddo jqGrid JS](http://guriddo.net/?page_id=103334)または古いjqGridのバージョン<= 4.7)。秒後、 'aftersavefunc'の使い方は正しいですが、' reloadGrid'関数の実装に問題があると思います。 'setTimeout'を内部で使用していますか?正確に今何が間違っていますか?再読み込み後に*古いデータ*が表示されますか?どの 'datatype'にグリッドがありますか?あなたは 'loadonce:true'オプションを使いますか? – Oleg

+0

あなたの返信ありがとう、Oleg。私は将来、バージョンとフォークを投稿することを心に留めておきます。 ジェイと呼ばれるポスターの下に私のために働く適切な答えがありました。 Everything( 'aftersavefunc'、 'successfunc')は必要に応じて動作します。 – Heimi

答えて

1

「aftersavefunc」と「successfunc」はコールバックですが、関数を直接設定しようとしているように見えるので、呼び出す前に呼び出されています。

それはこのようなものになります適切なコールバックのシグネチャを使用する:

"aftersavefunc": function (rowid, response, options) { 
    reloadGrid('#telephoneGrid'); 
}, 
+0

Worked。よかった。ありがとう。 – Heimi

0

あなたはEditParameters(だけではなく、オブジェクトを定義し、それを直接使用して)のgetter必要がありますが、彼らはただ、焼成前に、適切に設定されますかeditParametersの値をチェックしていない理由を確認してください。

jQuery("#telephoneGrid").jqGrid('editRow', id, editParameters); 

getterは.hasClass('edit')の中にありますので、edit-subに行く前にゲッターを使用してみてください。function onTelephoneSelect(id, status, e) {の後ろに違いがあるかどうかを確認してください。 (電話番号は電話番号)にはわからないからです。

+0

_EditParameters_が2回必要です。新しいエントリを追加するために(質問には言及されていない)、編集のために一度。 残念ながら、それは違いはありません。 _onTelephoneSelect_は、編集アイコンがクリックされたときに呼び出され、保存が成功した後にのみグリッドをリロードする必要があります。 – Heimi

+0

あなたはなぜ「aftersavefunc」が起動する前に保存が行われると仮定しますか? "jQuery( '#telephoneGrid')。saveRow(lastSel); "がIFブロック内にあり、そのブロック内のaftersavefuncをAFTER save(それはすべきですか?)してから、 "jQuery #telephoneGrid ")。jqGrid( 'editRow'、id、editParameters); "ブロック外 - 保存後?この場合、IDの照会の前にreloadGridが発生すると想定するのが理にかなっていますか? –

+0

ご協力ありがとうございます。私は 'aftersavefunc'をラップするべきだった。 – Heimi

関連する問題