如果我理解你是正确的,那么你有非常接近的问题,如中讨论的答案 https://stackoverflow.com/questions/6459900/jqgrid-subgrid-doesnt-populate-with-data/6467539#6467539。你尝试做的事情似乎是一样的加载时展开:true http://www.trirand.com/jqgridwiki/doku.php?id=wiki:subgrid#properties的财产subGridOptions
选项应该做。就像我在中描述的答案 https://stackoverflow.com/questions/6459900/jqgrid-subgrid-doesnt-populate-with-data/6467539#6467539jqGrid 不支持 Ajax 请求排队。如果你执行
$("#myGridName").expandSubGridRow(ids[0]);
带遥控器datatype
or subgridtype
('json' 或 'xml')Ajax 请求将被发送到服务器。直到我们收到服务器相应的响应内部属性
$("#myGridName")[0].grid.hDiv.loading
将被设置为true
以及所有其他 Ajax 请求,例如来自$("#myGridName").expandSubGridRow(ids[1])
将只是跳过(忽略).
当前的实现中存在同样的问题(bug)expandOnLoad: true
。如果你打开在官方 jqGrid 演示 http://trirand.com/blog/jqgrid/jqgrid.html“Hierarchy (4.0) new”树节点,然后查看演示“Expand all Rows on load”,您会看到并非所有行都正确展开正如所承诺的(您必须滚动网格才能看到所有子网格)。
我认为要正确实现加载时子网格的扩展,您应该执行以下操作
- 您应该检查折叠子网格的列表(相应的行具有类“sgcollapsed”)并且仅展开第一个找到的子网格.
- 应该完成下一个子网格的扩展只有在服务器的响应被接收并处理后.
我可以推荐你使用success
的回调函数ajaxSubgridOptions
jqGrid 选项,因为没有loadComplete
加载子网格后的事件。当前子网格中 Ajax 请求的实现使用complete
的回调函数jQuery.ajax http://api.jquery.com/jQuery.ajax/ (see here https://github.com/tonytomov/jqGrid/blob/v4.2.0/js/grid.subgrid.js#L162)这将被称为before success
打回来。所以你可以定义你的success
回调作为方法ajaxSubgridOptions
jqGrid 的选项。里面的success
您可以拨打的回调$("#myGridName").expandSubGridRow(ids[i])
下一个节点(如果有尚未展开)。这样你就可以打开所有子网格。
更有效地枚举子网格答案 https://stackoverflow.com/questions/7080859/jqgrid-iterate-over-the-grid-data-in-a-subgrid/7084920#7084920可能对你有帮助。