javascript - 当 jqGrid 中的 (“reloadGrid” 时可以触发 'loadonce: true' )吗?

标签 javascript jqgrid

我使用的 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) 和排序参数 (sortnamesortorder) 并通过触发 reloadGrid 事件使用新选项重新加载当前显示的页面。 jqGrid将对数据进行排序并显示请求的页面。因此,了解 .trigger('reloadGrid') 也适用于本地数据非常重要。

如果将 datatype:'xml'loadonce: true 一起使用,则服务器必须返回所有数据。数据必须仅按请求的 sortnamesortorder 选项排序(请求的参数 sidxsord到服务器)。因此,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/

相关文章:

javascript - 如何修复 'Unexpected token < in JSON at position 0'?

JavaScript 内部函数打印先前的值

javascript - JqG​​rid 无法将 JSON 数据与 "dot"绑定(bind)

javascript - JqG​​rid 格式化程序按钮(操作)不可见

javascript - JqG​​rid 更新特定行

jqgrid - 使用多选、多框和滚动在输入时进行内联编辑 :1

javascript - ajax 点击后 JQuery masonry 不起作用

javascript - 如何使用 Google Cloud Storage JSON API 获取可恢复上传的上传进度信息?

javascript - 通过 PHP 从 MySQL 中提取位置进行地理编码

jqgrid - 如何根据列中的值更改 JQGrid 中的行颜色