我有一个简单的函数
function createGrid(limit){
$("#list").trigger("reloadGrid");
$("#list").jqGrid({
url:indexObj.gridUrl,
postData:{
"limit":limit
},
datatype: "json",
colNames:['ID','type','folder','Description'],
colModel:[
{name:'id',index:'id', width:50},
{name:'type',index:'type', width:100},
{name:'folder_id',index:'folder_id', width:100},
{name:'description',index:'description', width:200}
]
});
}
我首先用limit=1调用它,它调用服务器并返回正确的数据。然后我用limit=2调用它,它只是重新运行上一个ajax调用(limit=1),当然会返回相同的数据。
为什么postData实际上没有更改?我在fireBug中看到,"极限"确实有正确的值。
或者在重新加载时,可以使用setGridParam
重置postData
、
$("#list").jqGrid('setGridParam', {
postData: {"limit":limit }
}).trigger('reloadGrid');
而且,您不需要重新初始化/创建jqGrid,但您可以简单地使用:
function createGrid(limit){
$("#list").trigger("reloadGrid");
#Code Goes here#
}
我不确定具有这种数据缓存的结构是否良好,但您当前的问题是清楚的。
重要的是要理解呼叫
$("#list").jqGrid({
url:indexObj.gridUrl,
...
});
创建网格。它在非常复杂的div和表结构中转换空的<table id="list"></table>
。因此只能创建一次网格。
网格由许多部分(如标题)组成,这些部分在下一次填充网格时不需要重新创建。因此jqGrid提供了reloadGrid
事件,可以触发该事件来填充网格的主体。如果jqGrid有postData
,其值类似
postData: {
limit: limitVar
}
则if意味着CCD_ 6的对象值将被创建并用CCD_ 7变量的当前值初始化一次。如果您有外部变量(全局变量或在某些外部范围中定义的变量),则可以使用
postData: {
limit: function () { return limitVar; }
}
在这种情况下,您将使用limitVar
的当前值作为URL的limit
参数的值。顺便说一句,如果用户只点击列标题,则需要对网格进行排序,jqGrid将向url
发出新的HTTP请求。如果在postData
内部使用function
,那么在这种情况下,limitVar
的当前值也将为。
如果您对现有代码的修改较少,那么您可以将$("#list").trigger("reloadGrid");
行(在当前代码中绝对不需要)替换为
$("#list").jqGrid("GridUnload");
它将破坏之前创建的潜水和表格结构(用于构建网格),并在同一位置创建一个空的<table id="list"></table>
。这样就可以重新创建网格。这样的代码不会那么有效,但在某些情况下可能会非常有用(例如,请参阅答案和本文)。