用新数据重新加载jqGrid



我有一个简单的函数

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>。这样就可以重新创建网格。这样的代码不会那么有效,但在某些情况下可能会非常有用(例如,请参阅答案和本文)。

最新更新