我使用的 jqGrid 源文件在顶部显示其版本为 jqGrid 4.4.0
,日期为 Date 2012-06-14
在此wiki page它说 trigger(“reloadGrid”)
,
使用当前设置重新加载网格。这意味着如果数据类型是 xml 或 json,则会向服务器发送新请求。此方法应该应用于已经构建的网格。请注意,此方法不会更改 HEADER 信息,这意味着对 colModel 的任何更改都不会受到影响。您应该使用 gridUnload 重新加载具有不同 colModel 的新配置。仅当 loadonce: false 时才有效!!!
是的,它说“只有在 loadonce: false 时才有效!!!”
和this SO answer为此建议一些技巧。它说,
如果使用 loadonce:true jqGrid,请在第一次从网格加载数据后将数据类型参数更改为“本地”。所有接下来的网格重新加载(排序、分页、过滤)都在本地进行。如果您想再次从服务器刷新网格数据,您应该将数据类型设置为其原始值(“json”或“xml”)。
所以这个答案实际上解决了我面临的问题。我有一个 jqGrid,它有 loadonce:true
。 (这里我关心排序,它工作得很好)。但后来我不得不稍微更改代码以使用新的服务器数据重新加载 jqGrid。 (用户可以更改一些详细信息并刷新表,以便 jqGrid 应该重新加载从服务器新获取的数据)。不幸的是,直到我将 loadonce:true
更改为 loadonce:false
后,这才起作用。
我将重载称为这样,
$("#tableGrid").setGridParam({url:'myUrl'}).trigger('reloadGrid');
现在重新加载就可以了。但排序消失了:(
然后我看到了这个答案并将其更改为这样的内容,
我在初始化网格时设置了loadonce:true
。
并按如下方式调用重新加载。
$("#tableGrid").setGridParam({url:'myUrl',datatype:'xml'}).trigger('reloadGrid');
之后所有排序都很好,用户也可以重新加载网格。
这种做法正确吗?我认为它解决了问题,但是是这样吗?因为文档说你不能在 loadonce:true
时重新加载?
最佳答案
首先我强烈建议您将您使用的jqGrid从版本4.4.0升级到free jqGrid 4.12.1.免费的 jqGrid 是我从 2014 年底开始开发的 jqGrid 的分支。请参阅 the answer 的更新部分的帖子和链接。获取更多信息。你应该明白,jqGrid 4.4.0确实是一个复古版本。它是在 jQuery 1.4.3 版本时发布的。当时IE9是Internet Explorer的最新版本,但使用最多的版本是IE6-IE8。现在我们又迎来了网络开发的另一个时期。
了解 loadonce: true
和 .trigger('reloadGrid')
的作用非常重要。
jqGrid 支持在 JavaScript 对象内本地保存数据。可以使用datatype: "local"
,使用data
参数提供数据,然后使用local分页、排序和过滤数据来处理数据数据。您可以更改页面大小 (rowNum
)、页码 (page
) 和排序参数 (sortname
、sortorder
) 并通过触发 reloadGrid
事件使用新选项重新加载当前显示的页面。 jqGrid将对数据进行排序并显示请求的页面。因此,了解 .trigger('reloadGrid')
也适用于本地数据非常重要。
如果将 datatype:'xml'
与 loadonce: true
一起使用,则服务器必须返回所有数据。数据必须仅按请求的 sortname
、sortorder
选项排序(请求的参数 sidx
和 sord
到服务器)。因此,jqGrid 用所有数据填充内部data
参数。 jqGrid显示返回数据的第一页(基于页面大小rowNum
和页码page
)。最后(处理 loadComplete
回调后)jqGrid 将 datatype
的原始值(在您的情况下为 "xml"
)更改为 datatype: "本地”
。现在用户可以使用本地分页、排序和过滤数据,而无需与服务器进行任何通信。在每次排序、分页和过滤时,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 } }
更改按钮的行为,以便在用户单击按钮时从服务器重新加载数据。不需要手动更改数据类型
。
关于javascript - 当 jqGrid 中的 (“reloadGrid” 时可以触发 'loadonce: true' )吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35270721/