2017-10-04 98 views
1

我試圖重新加載網格保存一行之後才能夠獲得該行的ID爲記錄的目的,但不知何故「aftersavefunc」和「successfunc」在保存之前觸發reloadGrid('#gridGrid')'。看起來'aftersavefunc'和'successfunc'是相同的。現在我無法添加或編輯任何行。jqGrid的火患「aftersavefunc」和「successfunc」前「saveRow」

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的**版本**您使用的信息,並** *叉*([自由的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

謝謝你的回覆,奧列格。我會記住發佈我將來使用的版本和分支。 傑伊的海報下面有適合我的正確答案。所有東西('aftersavefunc','successfunc')都應該如此。 – Heimi

回答

1

「aftersavefunc」和「successfunc」是回調,但似乎你想直接設定的功能,所以他們要叫你打算了。

使用適當的回調簽名就應該是這個樣子:

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

工作。太好了謝謝。 – Heimi

0

不知道爲什麼你需要getter方法EditParameters(而不是僅僅定義對象,並直接使用它),但是你檢查的值editParameters他們是否得到正確設置,只是射擊前:

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

您的獲得者在.hasClass('edit')之內,因此您可能會在嘗試使用自己的獲取者進入edit-sub之後,在function onTelephoneSelect(id, status, e) {之後查看是否有任何區別。 (僅僅因爲我們不知道你在哪裏/何時打電話onTelephoneSelect)。

+0

我需要_EditParameters_兩次。一次用於添加新條目(在問題中未提及)和編輯。 不幸的是它沒有區別。 _onTelephoneSelect_在被點擊編輯圖標時被調用,網格只能在成功保存後重新加載。 – Heimi

+0

爲什麼你認爲在''aftersavefunc'被解僱之前發生了儲蓄?這似乎對我說:「jQuery的(‘#telephoneGrid’)saveRow(lastSel); 」是內部IF塊,它會火aftersavefunc內該塊保存後(因爲它應該?),然後運行「的jQuery(」 #telephoneGrid 「)的jqGrid( 'editRow',ID,editParameters); 」 塊外 - 保存後?在這種情況下,期待reloadGrid發生在查詢ID之前是合乎邏輯的? –

+0

感謝您的幫助。我應該包裝'aftersavefunc'。 – Heimi