【问题标题】:Expanding multiple nodes of jqgrid treegrid扩展jqgrid treegrid的多个节点
【发布时间】:2012-01-24 06:12:20
【问题描述】:

我正在使用 jqgrid 的 treegrid,并且正在根据请求加载子节点的数据。 但是当用户点击一个节点(比如node1)来展开它并立即点击另一个节点(比如node2)然后第一个节点(node1)的子节点被显示为第二个节点(node2),node2的图标变为显示为展开,但它具有节点 1 的子节点的数据,折叠节点 2 不会做任何事情,但折叠节点 1 会折叠节点 1 的子节点,这些子节点显示为节点 2 的子节点。

其他人遇到过这样的问题吗? jqgrid的数据是json格式的邻接模型。

【问题讨论】:

  • demo 的“3.3 版中的新功能 -> 树形网格”中的演示有同样的问题。这是 jqgrid 中的错误吗?

标签: jqgrid


【解决方案1】:

它看起来像 jqGrid 中的一个错误。我查看了代码,我想我理解了这个问题。

每次用户点击“展开”图标时,the code 都会被执行,这会调用 expandRowexpandNode 方法。 expandNode 的代码首先覆盖 jqGrid 的 treeANode 参数的当前值,该参数在内部用于标识将添加新数据的行。然后将设置对服务器的新请求的nodeidparentid(或n_leftn_right 用于'nested' 网格模型)和n_level 参数,然后将设置reloadGrid触发。

问题是稍后,在处理内部populate方法开头的reloadGrid时,会测试内部.grid.hDiv.loading属性,如果它被设置为上一个仍待处理的请求,则将跳过第二次重新加载网格。问题是treeANode 参数的值已经改变了。因此,作为第一个扩展节点的子节点返回的项目将添加为最后一个单击节点的 clidren。

作为bug修复我建议修改the line的代码如下

} else if (!this.grid.hDiv.loading) {

如果另一个挂起的请求仍在处理,treeANode 参数不会被第二个点击覆盖。

您可以从here下载jquery.jqGrid.src.js的修改版,测试修复后问题是否会解决。如果它可以解决问题,我将在the trirand forum 上发布相应的错误报告以及如何解决问题的建议。

作为另一种解决方法,您可以使用 jqGrid 的 loadui: 'block' 选项,该选项在处理对服务器的挂起请求期间不允许任何用户交互。

【讨论】:

  • 我也浏览了代码,是的,不允许更改 node2,因为你建议的工作,但如果修复可以在 reloadGrid 方法中进行,那么 jqgrid 可以支持同时扩展节点。谢谢 Oleg,我知道你可以帮忙 :),但如果支持多个扩展节点,更好的解决办法是。
  • @user976634:我同意如果允许同时进行 ajax 请求会更好,但它的实现将在许多 jqGrid 模块中进行重大更改。所以我建议先修复现有的bug。
  • @user976634:我提交了the bug report 以确保托尼会阅读有关问题和建议的错误修复的信息。
猜你喜欢
  • 1970-01-01
  • 2012-02-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-29
  • 2014-12-18
  • 1970-01-01
相关资源
最近更新 更多