【发布时间】:2013-01-10 23:20:00
【问题描述】:
这是我之前发布的here 问题的后续。多亏了奥列格的回答,我的网格现在可以正确显示了。但是,现在我需要在引导菜单项单击时使用不同的 URL 刷新 jqgrid 中的数据。以下是我的代码:
$("#menuitem").click(function(e){
$("#grid").jqGrid('setGridParam', {url: '/getdata?id=1234&name=val.text'});
$('#grid').trigger("reloadGrid");
});
菜单选项是在我们从 ajax 请求中获取数据后动态添加的。触发重新加载时,网格似乎正在重新加载。但是,它似乎从旧 URL('/getdata') 获取数据,而不是具有不同参数集的新 URL。我也尝试了here 提到的解决方案,但在我的情况下它不起作用,因为我已经动态添加了菜单项。
非常感谢任何帮助。
编辑:我查看了 firebug 上的页面请求。当我单击菜单项时,我没有看到请求。我也加了
$("#list").jqGrid('GridUnload');
到this 问题的答案中提到的点击处理函数。它为我清除了网格,但没有重新加载。所以我在那里添加了 jqgrid 的代码,然后它工作了,jqgrid 显示了新数据。所以我的更改代码如下所示:
$("#menuitem").click(function(e){
$("#list").jqGrid('GridUnload');
$("#grid").jqGrid({
url: '/getdata?id=1234&name=val.text'',
datatype: "json",
colNames: ['data'],
colModel: [
{name: 'data', align: 'center'}
],
jsonReader: {
root: "logs",
cell: "",
id: function () {
return function () {
return $.jgrid.randId();
}
},
page: function() { return 1; },
total: function() { return 1; },
records: function(obj) { return obj.logs.length; }
},
loadonce: true,
viewrecords: true,
autowidth: true,
ignoreCase: true,
height: "auto",
rowNum: 999,
autoencode: true,
beforeProcessing: function (data) {
var items = data.data.data.split("\n"), i, l, item;
data.logs = [];
for (i = 0, l = items.length; i < l; i++) {
item = $.trim(items[i]);
if (item.length > 0) {
data.logs.push([item]);
}
}
}
}).jqGrid('filterToolbar', {stringResult: true, searchOnEnter: false, defaultSearch: "cn"});
});
有没有更好的方法来做到这一点。它的工作看起来太笨重和沉重。有没有办法让重载网格工作?我想这是内部发生的事情,但是当您使用插件时似乎代码太多了。
谢谢,
阿莎
【问题讨论】: