我正在使用jqgrid的treegrid,并且正在根据请求加载子节点的数据。 但是当用户点击一个节点(比如node1)来扩展它并立即点击另一个节点(比如node2)时,第一个节点(node1)的子节点正在为第二个节点(node2)显示,node2的图标变为显示为已展开,但它包含node1的子项的数据,并且折叠node2不执行任何操作,但折叠node1会折叠node1的子项,这些子项将显示为node2的子项。
其他人是否面临这样的问题? jqgrid的数据是json格式的邻接模型。
答案 0 :(得分:1)
它看起来像是jqGrid中的一个错误。我查看了代码,我想我理解了这个问题。
每次用户点击“展开”图标the code时,都会调用expandRow
和expandNode
方法。 expandNode
的代码首先覆盖jqGrid的treeANode
参数的当前值,该参数在内部用于标识将添加新数据的行。然后,对服务器的新请求的nodeid
,parentid
(或n_left
和n_right
以及[{1}}网格模型)和'nested'
参数将被设置,之后将触发n_level
。
问题是以后,在内部reloadGrid
方法开始处理reloadGrid
期间,内部populate
属性将被测试,如果它被设置为先前仍然挂起的请求,则将跳过第二次重新加载网格。问题是.grid.hDiv.loading
参数的值已经改变。因此,作为第一个消费节点的子节点返回的项目将被添加为最后一个节点的clidren。
由于错误修复,我建议将the line代码修改为以下
treeANode
如果另一个待处理请求仍在处理中,则} else if (!this.grid.hDiv.loading) {
参数不会被第二次点击覆盖。
您可以从here下载treeANode
的修改版本,并测试问题是否会在错误修复后解决。如果它能解决问题,我会发布相应的错误报告,并提出如何解决the trirand forum问题的建议。
作为另一种解决方法,您可以使用jqGrid的jquery.jqGrid.src.js
选项,该选项在处理对服务器的待处理请求期间不允许任何用户交互。