我有一个非常复杂,相当过时的jqgrid实现,我正在升级到最新的free-jqgrid,我们遇到的问题是在清除网格后卸载,当我们重新初始化网格时,行ids比他们应该开始的要高。
他们似乎仍在增加,而不是重新开始。在重新渲染之前,是否需要清除一些全局计数器以使网格完全清晰?
if ( this.timesheet_grid ) {
this.timesheet_grid.grid.jqGrid( 'GridUnload' );
this.timesheet_grid.grid = null;
this.timesheet_grid = null;
显示类似jqg56
正如@Oleg建议我只需要在处理网格数据时手动设置id属性。
答案 0 :(得分:1)
jqGrid使用公共计数器,以确保在使用id生成器生成时不会出现重复值。
要重置该值,您需要将guid参数设置为1 - 即
$.jgrid.guid =1;
卸载网格后
答案 1 :(得分:1)
我看到你错误地理解了rowid的含义和输入数据的要求。我特别想知道托尼重置$.jgrid.guid
的建议。我发现建议非常糟糕,因为它看起来像一个解决方案,但它可以产生更严重的问题,因为问题已经解决了!
首先,了解什么是rowid 非常重要。 Rowid是网格行的id
属性的值:网格主体的id
元素的<tr>
值(请参阅here)。 rowid几乎用作jqGrid的所有回调和事件的参数。因为jqGrid 必须为每行分配id属性,并且网格的输入数据必须包含rowid信息! rowid的存在对于工作jqGrid至关重要。只是因为jqGrid 在输入数据错误的情况下生成唯一的rowid 。生成id的替代方法是阻止创建网格。
jqGrid通过仅为某些简单网格指定输入数据中的rowid来容忍错误,其中一个只需显示一些简单数据而一个永远不需要使用rowid。如果您使用ID,那么您应该只以一种方式解决问题:您必须修复输入数据。例如,您可以在输入数据的每个元素中包含具有唯一值的id
属性。您应该考虑到不仅在网格中而且在整个HTML页面上不存在id重复项。如果您的HTML页面有更多作为一个网格(包含子网格的网格),则严格建议对每个网格使用具有唯一值的idPrefix
选项。
重置$.jgrid.guid
非常危险,由于创建了具有重复ID值的元素,因此可能会破坏jqGrid的功能。属性$.jgrid.guid
是全局。它在页面上的所有网格和子网格上都很常见。手动重置$.jgrid.guid
后,简单的子网格方案将生成id重复项。它将在jqGrid代码的许多位置中使用的$.jgrid.randId()
方法内部使用。例如,addRow
使用的方法inlineNav
使用该方法。
我再一次重申我的建议。如果您使用rowid或者rowid的值以某种方式对您很重要,那么您必须在每个输入数据项中包含id
属性。如果某些其他属性已具有唯一值,则可以在key: true
的相应列中添加colModel
(只能在一列中使用key: true
)。或者,如果输入数据的prmNames: { id: "myId" }
属性包含唯一的rowid而不是默认的myId
属性,则可以添加id
。
答案 2 :(得分:1)
如果解决方案基于了解产品的行为,那么这是一个很好的解决方案。
如果我们试图解决问题,而不了解行为 - 这是一个危险的解决方案。
很容易说 - 这是一个糟糕的解决方案,使用此解决方案非常危险 - 所以我的问题是:
如果用户在某些条件下重新加载页面,计数器会发生什么?
答案是:计数器已重置,我们将转到上述答案中描述的相同情况。