可以触发(“reloadGrid”)在' loadonce:true'在jqGrid中?

时间:2016-02-08 13:21:53

标签: javascript jqgrid

我使用的jqGrid源文件在顶部显示为jqGrid 4.4.0,日期为Date 2012-06-14

在此wiki page中,它表示trigger(“reloadGrid”)

Reloads the grid with the current settings. This means that a new request is send to the server if datatype is xml or json. This method should be applied to an already-constructed grid. Pay attention that this method does not change HEADER information, that means that any changes to colModel would not be affected. You should use gridUnload to reload new configuration with different colModel. IT'S WORK ONLY IF loadonce: false !!!

是的,它说"只有在加载时才会工作:错误!!!"

this SO answer提出了一些建议。它说,

If you use loadonce:true jqGrid change the datatype parameters to 'local' after the first load of data from the grid. All next grid reloading (sorting, paging, filtering) works local. If you want refresh the grid data from the server one more time you should set datatype to its original value ('json' or 'xml').

所以答案实际上解决了我面临的问题。我有一个loadonce:true的jqGrid。 (在这里我关心排序,它完美地工作)。但后来我不得不改变代码,用新的服务器数据重新加载jqGrid。 (用户可以更改一些细节并刷新表,以便jqGrid应该从服务器重新加载新获取的数据)。不幸的是,在我将loadonce:true更改为loadonce:false之前,这并没有奏效。

我打电话给你重新加载,

$("#tableGrid").setGridParam({url:'myUrl'}).trigger('reloadGrid');

现在重装很好。但排序已经消失:(

然后我看到SO回答并将其改为类似的东西,

初始化网格时设置loadonce:true。 并调用重新加载如下。

$("#tableGrid").setGridParam({url:'myUrl',datatype:'xml'}).trigger('reloadGrid');

之后,所有排序都很好,用户也可以重新加载网格。

这种做法是否正确?我认为它解决了这个问题,但是它?因为文档说你在loadonce:true时无法重新加载?

1 个答案:

答案 0 :(得分:3)

首先,我会严格建议您将使用版本4.4.0的jqGrid升级到free jqGrid 4.12.1。免费jqGrid是我从2014年底开始开发的jqGrid的分支。有关其他信息,请参阅帖子和the answer的UPDATED部分的链接。你应该明白jqGrid 4.4.0是真正的复古版本。它发布于jQuery 1.4.3版本时。这是IE9最新版本的Internet Explorer,但IE6-IE8是最常用的版本。现在我们在Web开发中有另一次

了解loadonce: true以及.trigger('reloadGrid')做什么非常重要。

jqGrid支持在JavaScript对象内部本地保存数据。可以使用datatype: "local",使用data参数提供数据,然后使用本地分页处理数据,对数据进行排序和过滤。您可以更改页面大小(rowNum),页码(page)和排序参数(sortnamesortorder)和重新加载当前显示的页面的值通过触发reloadGrid事件来使用新选项。 jqGrid将对数据进行排序并显示所请求的页面。因此,了解.trigger('reloadGrid')也适用于本地数据非常重要。

如果您将datatype:'xml'loadonce: true一起使用,则服务器必须返回所有数据。数据必须仅按请求的sortnamesortorder选项(对服务器的请求的参数sidxsord)进行排序。因此,jqGrid 使用所有数据填充内部data参数。 jqGrid显示返回数据的第一页(基于页面大小rowNum和页码page)。最后(在处理loadComplete回调之后),jqGrid会将datatype(在您的情况下为"xml")的原始值更改为datatype: "local"。现在,用户可以使用本地分页,排序和过滤数据,而无需与服务器进行任何通信。在每个排序,分页和过滤jqGrid使用reloadGrid事件来显示相应的数据页面。

如果您需要从服务器重新加载数据,则只需恢复datatype参数的原始值并触发reloadGrid即可。例如

$("#tableGrid").setGridParam({datatype:'xml'}).trigger('reloadGrid');

如果您的服务器已正确实施,则用户将看到所请求的数据页面,并且将刷新所有本地数据。显示页面后,datatype将更改回datatype:'local'

如果使用当前的免费jqGrid,则可以使用以下选项

loadonce: true,
forceClientSorting: true,
navOptions: { reloadGridOptions: { fromServer: true } }

选项forceClientSorting: true从服务器中删除提供排序数据的要求。免费的jqGrid可以对从服务器返回的数据进行排序。如果您使用navGrid,则会添加"刷新" /"重新加载"按钮。选项navOptions: { reloadGridOptions: { fromServer: true } }会更改按钮的行为,以便在用户单击按钮时从服务器重新加载数据。不需要手动更改datatype