2011-08-27 31 views
1

jqGrid編輯後的行標識需要在保存後返回ID作爲響應後刷新。 我嘗試了下面的代碼,但未定義的消息框出現。如何通過格式化程序保存按鈕保存按鈕後更新jqgrid行標識

如何更新行ID? 如何通過保存操作按鈕更新行後的響應文本?

安德魯斯

grid.jqGrid({ 
    colModel: [{name:_actions,width:45, 
    formatter:"actions", 
    formatoptions: 
    {keys:true, 
    delbutton:false, 
    onSuccess:function (rowID, response) { 
     alert(response);    
     $("#" + rowID).attr("id", response.responseText); 
     }, 

    onEdit: function (rowID) { 
    if (typeof (lastSelectedRow) !== 'undefined' && rowID !== lastSelectedRow) 
     cancelEditing($('#grid')); 
     lastSelectedRow = rowID; 
    } 
}} 

回答

2

我不想再回到我們的老討論,但我只是想提醒的id變化是不是好的做法。

您可以嘗試通過在setTimeout內部放置$("#" + rowID).attr("id", response.responseText);來解決問題。如果在內聯編輯代碼中處理舊ID後進行更改。

此外,您可以驗證以下內容。在由jqGrid內部保存的其他地方重命名id可能很重要。例如,selrowselarrrow,其中所選行的ID將被保留。

+0

主要問題是操作按鈕沒有單個事件,其中舊的rowid和響應文本都在內聯編輯aftersavefunc中傳遞。我通過在'onSuccess = function(jqXHR){actionRessect = jqXHR; 返回true; }「'和'afterSave =功能(ROWID){ aftersavefunc(ROWID,ActionResponse的)}'用這個。Db的方案使用自然主鍵ID和部署到成千上萬的網站。改變這甚至造成重複的替代ID作爲你推薦工作量太大,因爲需要重寫許多生產應用程序 – Andrus

+1

@安德魯斯:好的,我知道如果安裝了許多舊版本的軟件,更新方案可能會很複雜,但我沒有想到這個問題。我建議你不改變現有表的主鍵。我建議增加一個額外的** **在表列中自動增量值可以保存。在此之後,你可以把唯一約束或一個索引的列有快速搜索來自列的值並**僅將值作爲id用於jqGrid **。在其他應用程序中,您可以繼續使用舊的主鍵。可以工作 – Oleg

+1

@安德魯斯:你應該小心地把'jqXHR'保存在某個地方。您應該編寫代碼,以便指針在未使用時分配給「null」。如果你不這樣做,你可能有記憶韭菜,因爲'jqXHR'的內存不能被釋放。 – Oleg