2012-05-29 22 views
1

当有jqGrid的页面上我想扩展它传递一个额外的参数到目前为止,我最好的尝试:添加参数,每一个jqGrid的Ajax调用

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

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

我做这种方式,因为它看起来像jqGrid忽略了你对jQuery的ajax处理所做的任何改变。

谢谢。

回答

3

一般而言,您发布的代码应该可以正常工作,并且将会在下一次重新加载时使用新的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"; } 
} 

在你可以在功能实现更多的逻辑的方式定义网格,你可以使用一些变量从外scote在函数主体的内部,或者从页面上存在的控件获取一些值(有关详细信息,请参见here)。在这种情况下,您可以实施动态specialParam而不使用getGridParam

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

1

如果将是一些设置,不会发生太大的变化,你可以通过使用这样的事情

function getSpecialParam() 
{ 
    return 'foo'; 
} 
$.jgrid.defaults = $.extend($.jgrid.defaults, 
    { 
     postedData:{ 
      specialParam:getSpeicalParam 
     } 
    }); 
其添加到 $.jgrid.defaults
相关问题