2011-12-17 39 views
1

如何通過添加導航按鈕添加行,如何傳遞額外的POST鍵添加控制器?jqgrid,添加行時使用添加導航按鈕時如何傳遞數據

我試着下面的代碼傳遞_dokdata與表單值,但_dokdata不傳遞給控制器​​在 服務器。

$("#grid").jqGrid('inlineNav', '#grid_toppager', { 
    addParams: { 
    useDefValues : true, 
    useFormatter : false, 
    addRowParams : { 
     extraparam : { _dokdata : FormData }, 
     editData: { _dokdata: FormData }, 
     }, 
    editData: { _dokdata: FormData }, 
    extraparam : { _dokdata : FormData }, 
    }, 

    add: true, 
    edit: false, 
    save: true, 
    cancel: true, 
    editParams : {} 
    }); 

function FormData() { 
    return JSON.stringify($("#_form").serializeArray()); 
} 
+0

我在代碼之前固定了'<! - language:lang-js - >'的位置。現在您會看到代碼將使用特定於JavaScript的顏色進行格式化。如果您使用額外的jquery或javascript標籤,則不需要添加'<! - language:lang-js - >'以使用良好的格式(帶顏色)代碼。 – Oleg 2011-12-18 21:23:57

回答

4

看來你描述的問題是在你的代碼誤差小的jqGrid中的代碼的bug混合(見線開始the place)。

代碼中的問題是,您不像addParams那樣正確設置editParams。正確的用法應該是:

$("#grid").jqGrid('inlineNav', '#grid_toppager', { 
    addParams: { 
     useDefValues: true, 
     addRowParams: { 
      keys: true, 
      extraparam: { _dokdata: FormData } 
     } 
    }, 
    editParams: { 
     extraparam: { _dokdata: FormData } 
    }, 
    add: true, 
    edit: false, 
    save: true, 
    cancel: true 
}); 

function FormData() { 
    return JSON.stringify($("#_form").serializeArray()); 
} 

在jqGrid的的代碼的當前版本的問題是,在我看來這jqGrid的在 保存按鈕使用(見here)只有editParams.extraparam設置使用的,而不是使用諸如addParams.addRowParams.extraparam之類的東西。我在inlineNavaddParams.addRowParams參數中添加了keys: true選項。因此,如果用戶將通過按輸入來保存更改,並且將使用editParams.extraparam來保存行,則jqGrid的當前實現(v 4.3.0)將使用addParams.addRowParams.extraparam,如果通過「保存」按鈕保存行導航按鈕。

已更新:我測試了代碼,發現jqGrid v 4.3.0中有一個bug。我建議在the feature request引入$.jgrid.inlineEdit設置,可以像其他非常實用的設置$.jgrid.edit一樣使用,但是在內聯而不是表單編輯的情況下。在jqGrid 4.3.0中實現了功能請求 ,但實現包含一個錯誤。

修復bug應該從

o = $.extend($.jgrid.inlineEdit, settings, args[0]); 

33117304更換線路

o = $.extend(true, {}, settings, $.jgrid.inlineEdit, args[0]); 

如何從the demo的bug修復後正確地看到,所有的工作。

UPDATED 2:上述修復與the fix相同,但仍不正確。要修復這個錯誤,必須在代碼中進行更多的更改。例如,該線32-36(內側的editRow)可從

if(args[0] && typeof(args[0]) == "object" && !$.isFunction(args[0])) { 
    o = $.extend($.jgrid.inlineEdit, settings, args[0]); 
} else { 
    o = settings; 
} 

被改變以例如下列

if(args[0] && typeof(args[0]) == "object" && !$.isFunction(args[0])) { 
    settings.keys = false; // keys is args[0] and it's an object 
    o = $.extend(true, {}, settings, $.jgrid.inlineEdit, args[0]); 
} else { 
    o = settings; 
} 

以同樣的方式的線116-120(內側的saveRow

if(args[0] && typeof(args[0]) == "object" && !$.isFunction(args[0])) { 
    o = $.extend($.jgrid.inlineEdit, settings, args[0]); 
} else { 
    o = settings; 
} 

可更改爲

if(args[0] && typeof(args[0]) == "object" && !$.isFunction(args[0])) { 
    settings.successfunc = null; // successfunc is args[0] and it's an object 
    o = $.extend(true, {}, settings, $.jgrid.inlineEdit, args[0]); 
} else { 
    o = settings; 
} 

和線304

o = $.extend($.jgrid.inlineEdit, settings, args[0]); 

可改爲

o = $.extend(true, {afterrestorefunc: null}, $.jgrid.inlineEdit, args[0]); 

更新12:我張貼my suggestion到trirand關於 「刪除」 的問題。查看使用修復程序here的相同演示。

+0

謝謝。我試過但輸入密鑰不結束內聯添加。如何保存添加的行按Enter? – Andrus 2011-12-18 16:25:48

+0

@安德魯斯:這是第一個小型的打字錯誤:我用'key:true'而不是'keys:true'。更重要的是我在回答的「已更新」部分描述了一個錯誤以及相應的錯誤修復。 – Oleg 2011-12-18 18:03:12

+0

在IE9中,我按下了最新演示中的添加按鈕,填寫客戶名稱並按下回車鍵。工具欄中的保存和取消按鈕仍處於活動狀態。如何在成功添加後禁用它們進入?如果添加時發生錯誤,則添加的行消失。如何在添加錯誤時保持內聯添加模式以允許用戶查看數據?另外createContexMenuFromNavigatorButtons是未定義的 – Andrus 2011-12-18 18:52:26