在动态加载数据

时间:2016-10-21 16:17:09

标签: javascript jqgrid

我已将大量物料清单(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.treegrid.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(免费):4.4.3
jQuery:1.9.0
jQuery UI:1.8.23

编辑:我已升级到以下版本: jqGrid(免费):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

问题的根源保持不变。虽然treegrid数据在网格中仍然可见,但它似乎对jqgrid脚本不可见。在加载之前存在的行的属性是不可访问的,但在更新期间加载的行确实可用,可扩展(一次),并且位于网格中的正确位置。

1 个答案:

答案 0 :(得分:0)

好的,它花了很多调试,但我找到了答案。秘诀在于树格的loadonce属性。此属性的值必须为false,以便允许treegrid动态加载其他节点。这与行的isleaf属性密切相关。我发现如果treegrid有loadonce: true,并且任何行都有isleaf: false并且未加载子节点,那么当您展开该子节点时,所有本地数据都将被删除并由子节点替换行数据,但网格本身被正确操作并与本地数据不同步。 loadonce: false禁止删除本地数据,并且本地数据和网格保持同步。

也许这是一个错误。如果您有loadonce: true,则treegrid可能会禁止发布其他节点。而不是使网格和本地数据不同步。

BTW,我正在使用邻接模型。