jqGrid Treegrid在动态加载数据后不展开和折叠行
jqGrid Treegrid does not expand and collapse rows after dynamic load of data
我有一个大的物料清单(BOM),我已经加载到jqGrid Treegrid中。它大约有500行。由于各种原因,我试图将数据块保持在64K以下,因此在较大的bom上,我不会加载最深的叶子,例如任何深度超过6级的叶子。当用户选择展开一个节点时,我想动态地加载这些,因为这个节点开始时因为没有加载而崩溃。大多数事情都按预期进行。用户可以折叠和展开已加载的任何节点。但是,当用户单击以展开缺少子节点的节点时,服务器将返回它的所有子节点,并在树网格中正确显示。如果这些子节点中的任何一个有折叠的节点,用户可以将它们展开,以此类推到分支的末端。但正常的行为到此为止了。一旦用户单击以展开缺少子节点的任何节点,则只有包含在最近的服务器响应中的节点才能展开。没有什么可以坍塌。报告的错误是:
An unexpected error has occurred:
'Unable to get property 'isleaf' of undefined or null reference'
The url is ''
The line number is 92
行号所指向的源文件是grid. tregrid .js
下面是一个扩展缺少子节点的小节点的响应示例。
{"page":"1",
"total":"1",
"records":"3",
"rows":[
{"id":"491","hide":false,"cell":["491","M-065934-1","BRACKET","M","1","1",".00","","$.00","478","7","false","false"]},
{"id":"492","hide":false,"cell":["492","M-065934-2","COLLAR","M","1","1",".00","","$.00","478","7","false","true"]},
{"id":"493","hide":false,"cell":["493","PD M6 X 20","PIN,DOWEL","P","2","2",".00","","$.00","478","7","false","true"]}
]}
每行的最后四个值分别是parent、level、expanded和isleaf。在本例中,一旦加载了数据,只有行491是可扩展的,而这三行周围的行(包括父行478)都是不可折叠的。我需要看什么来确定问题?加载有影响吗?我没有手动设置加载在任何一行。当我加载网格时,我知道哪些行已经卸载了子行。我需要手动设置该值吗?
jqGrid (free): 4.4.3
jQuery: 1.9.0
jQuery UI: 1.8.23
编辑:我已经升级到以下版本:jqGrid (free): 4.11.1
jQuery: 1.12.4
jQuery UI: 1.10.4
在这些版本之外,我遇到了一个正在加载的require.js问题,但似乎不适合我的配置。我得到了相同的错误(尽管行号不同),下面是现在的错误:
An unexpected error has occurred:
'Unable to get property 'expanded' of undefined or null reference'
The url is 'http://as400/rui/scripts/jqgrid-4.11.1/js/jquery.jqgrid.min.js?v=5.15b'
The line number is 554
问题的根源还是一样的。虽然tregrid数据在网格中仍然可见,但它对jqgrid脚本似乎是不可见的。加载之前存在的行属性是不可访问的,但是在更新期间加载的行确实是可用的,可扩展(一次),并且位于网格中的正确位置。
好吧,这需要大量的调试,但我找到了答案。秘诀在于树网格的loadonce
属性。此属性必须具有false
的值,以便允许树网格动态加载其他节点。这与该行的isleaf属性密切相关。我发现,如果树网格具有loadonce: true
,并且任何行具有isleaf: false
并且子节点未加载,那么当您扩展该子节点时,所有本地数据都被删除并由子行数据替换,但是网格本身被正确操作并与本地数据不同步。loadonce: false
抑制本地数据的删除,本地数据和网格保持同步。
也许这是一个bug。如果你有loadonce: true
,也许tregrid应该抑制额外节点的发帖。而不是使网格和本地数据不同步。
顺便说一句,我使用邻接模型。
- ExtJS——在展开/折叠时调整面板高度
- 展开和折叠文件夹
- 展开和折叠自举手风琴
- 默认情况下折叠和展开嵌套列表
- Bootstrap折叠按钮不适用于android
- 展开移动设备上的折叠菜单,同时在桌面上保持悬停
- 展开/折叠跨度
- 如何在小页面中移动折叠下方的渲染阻塞javascript
- 默认情况下,在展开和折叠表时隐藏行
- 网格子网格在渲染时折叠
- 自动折叠移动设备上的OpenUI5侧边导航
- Visual Studio展开方法和所有子作用域或仅折叠方法
- 如果显示另一个折叠的图元,如何隐藏该图元
- 可折叠树在第二级不显示子树
- 引导程序/轨道-可折叠导航栏没有'我不能在手机上工作
- Bootstrap折叠手风琴一个面板打开,所有其他面板关闭
- 只使用CSS创建可折叠菜单或spry菜单
- 文本编码折叠
- jqGrid Treegrid在动态加载数据后不展开和折叠行
- Extjs 4.2 TreeGrid折叠/展开节点不会移除前面的节点