1

当页面上有一个 jqGrid 时,我想扩展它以传递一个额外的参数。到目前为止我最好的尝试:

...
    $('[role=grid]').jqGrid('setGridParam', { 'serializeGridData':MyGridOnBeforeRequest });

    function MyGridOnBeforeRequest (postData) {
        var newPostData = $.extend(postData, {
            specialParam: "foo"
        });
        return $.param(newPostData);
    }
...

我这样做是因为 jqGrid 似乎忽略了您对 jQuery 的 ajax 处理所做的任何更改。

谢谢。

4

2 回答 2

4

通常,您发布的代码应该可以工作,并且在下一个网格重新加载新的代码serializeGridData时将被使用。

serializeGridData您以发布的方式使用它只是有点奇怪。改用postData参数就足够了:

var postData = $('#grid').jqGrid('getGridParam', "postData");
$.extend(postData: {specialParam: "foo"});

此外,在您的原始代码中,您使用$.extend(postData, {specialParam: "foo"});哪个修改原始postData. 这还不错,但总的来说代码

function myGridOnBeforeRequest (postData) {
    return $.extend({}, postData, {specialParam: "foo"});
}

甚至

function myGridOnBeforeRequest (postData) {
    return $.extend(true, {}, postData, {specialParam: "foo"});
}

会更干净。的用法$.param并不是真正需要的。如果你返回一个对象,那么 jQuery.ajax 会$.param自动为你调用。

一种更常见的方法是直接使用postData看起来像的参数定义网格

postData: {
    specialParam: function () { return "foo"; }
}

在您可以在函数中实现更多逻辑的方式中,您可以使用函数主体内部外部代码中的一些变量,或者从页面上现有的控件中获取一些值(有关详细信息,请参见此处)。在这种情况下,您可以在 specialParam使用getGridParam.

最后一句话。已经从myGridOnBeforeRequest(将其与MyGridOnBeforeRequest您的问题中的颜色进行比较)的颜色可以看出它将以另一种方式解释。如果函数名称以大写字母开头,则表示与您定义新类的构造函数的常用名称转换相对应MyGridOnBeforeRequest。您必须将其用作var test = new MyGridOnBeforeRequest();:使用new. 只是比较var now = new Date();。强烈建议持有标准的 JavaScript 名称转换。

于 2012-05-29T10:24:46.230 回答
1

如果它是一些不会改变太多的设置,你可以 $.jgrid.defaults使用类似这样的东西将它添加到

function getSpecialParam()
{
    return 'foo';
}
$.jgrid.defaults = $.extend($.jgrid.defaults,
    {
        postedData:{
            specialParam:getSpeicalParam
        }
    });
于 2012-05-29T10:31:21.617 回答