我有这个简单的功能
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中看到“限制”确实有正确的值。
答案 0 :(得分:11)
或者在重新加载时,您可以使用setGridParam
重置postData
,
$("#list").jqGrid('setGridParam', {
postData: {"limit":limit }
}).trigger('reloadGrid');
并且,您不需要重新初始化/创建jqGrid,但您只需使用:
function createGrid(limit){
$("#list").trigger("reloadGrid");
#Code Goes here#
}
答案 1 :(得分:5)
我不确定具有这种数据缓存的构造是否良好,但是你当前的问题很明显。
了解电话
非常重要$("#list").jqGrid({
url:indexObj.gridUrl,
...
});
创建网格。它在非常复杂的div和表结构中转换空<table id="list"></table>
。所以只能创建一次网格。
网格由许多部分(如标题)组成,不需要在下一次填充网格时重新创建。因此jqGrid提供reloadGrid
事件,可以触发重新填充网格的正文。如果jqGrid的postData
具有某些值,例如
postData: {
limit: limitVar
}
然后if表示将创建postData
的对象值并使用当前值limitVar
变量初始化一次。如果您有外部变量(全局,或在某些外部范围中定义),那么您可以使用
postData: {
limit: function () { return limitVar; }
}
如果您将{em>当前值limitVar
作为网址limit
参数的值,则。顺便说一下,如果用户只需单击列标题,则需要对网格进行排序,并且jqGrid将向url
发出新的HTTP请求。如果您在function
内使用postData
,那么在案例中您将当前值limitVar
。
如果您在现有代码中进行少量修改,那么您可以将行$("#list").trigger("reloadGrid");
(当前代码中绝对不需要)替换为
$("#list").jqGrid("GridUnload");
它会破坏先前创建的潜水和表格(构建网格)的结构,并在同一个地方创建一个空的<table id="list"></table>
。所以你可以重新创建网格。此类代码的效果不是很有效,但在某些情况下可能会非常有用(例如,请参阅the answer和this one)。