jqGrid的。具有本地数据和特殊字段“加载”的树网格

时间:2014-12-09 19:31:06

标签: jqgrid treeview local

我使用带有本地数据的树网格。我对可以提高网格性能和设计的最佳实践感兴趣。所以我找到了一个相关的post,并想知道在什么情况下传递未声明的属性" loaded:true"作为数据源。 我很感激你的回答(特别是@Oleg回答:))。

1 个答案:

答案 0 :(得分:1)

最初实现了TreeGrid,以便它在jqGrid的隐藏列中保存有关树结构的所有其他信息。后来jqGrid开始支持本地数据,但隐藏列仍然存在于每一行中。

旧版本的TreeGrid只能加载来自服务器的数据。在开始时,jqGrid只需要加载根节点(父节点为null的节点)。如果需要扩展节点,那么新的Ajax请求包含其他参数nodeidparentidn_level(或nodeidn_leftn_right,如果使用n_leveltreeGridModel: "nested"将发送至url。服务器应该根据参数返回数据。一旦加载了数据并且需要折叠节点,孩子们将使用display: none CSS样式进行隐藏。下次jqGrid不应该再次从服务器加载数据。而不是jqGrid只显示节点的子节点。在这种情况下,父节点的loaded列(隐藏列)将保留true值。

如果使用本地数据创建TreeGrid,则所有工作都与上述完全相同。很遗憾,但TreeGrid到目前为止还不支持datatype: "local",但使用datatype: "jsonstring"可以做到几乎相同。您在问题中引用的My old answer演示了该方法。因为jqGrid(TreeGrid)的结构仍然面向远程加载,所以应该只在数据的所有节点上设置loaded:true属性。因此,远程TreeGrid无需与服务器进行任何额外通信即可工作。所有数据将立即加载,但折叠节点填充跟随隐藏的子项。

所以可以说,loaded:true属性的使用是一个hack,允许一次加载所有TreeGrid数据,并使节点延迟扩展或折叠,而无需与服务器进行任何额外的通信。