当页面上有一个jqGrid时,我想扩展它以传递一个额外的参数。到目前为止我的最佳尝试:
...
$('[role=grid]').jqGrid('setGridParam', { 'serializeGridData':MyGridOnBeforeRequest });
function MyGridOnBeforeRequest (postData) {
var newPostData = $.extend(postData, {
specialParam: "foo"
});
return $.param(newPostData);
}
...
我这样做是因为看起来jqGrid忽略了你对jQuery的ajax处理做的任何改变。
感谢。
答案 0 :(得分: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 :(得分:1)
如果某些设置不会发生太大变化,可以将其添加到
$.jgrid.defaults
使用类似的内容
function getSpecialParam()
{
return 'foo';
}
$.jgrid.defaults = $.extend($.jgrid.defaults,
{
postedData:{
specialParam:getSpeicalParam
}
});