2011-12-17 54 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