【发布时间】:2011-04-10 01:09:54
【问题描述】:
我有一些时间试图让 Dojo 网格 (1.5) 玩得更好。具体来说,我花了大约两周的时间来尝试实现一个网格,该网格允许我们的结果集数据折叠成行,行可以在其中展开。数据以 JSON 格式的完整集合形式出现,使用 ItemFileReadStore 作为存储。任何后续的排序或分页都是通过从应用程序获取新的 json 并在 url 中传入新的查询参数来处理的。
嵌套数据只有两层深 - 一个始终显示的顶层和一个结构与顶层相同的子数据数组。每个节点都有一个唯一 ID 和一个集群 ID - 在父节点上,唯一 ID 和集群 ID 将匹配。
我最初对 TreeGrid 感到非常兴奋 - 但我看不出如何格式化它以完成我需要的操作 - 即消除我的“摘要行”和一个充满空单元格 (???) 的额外行除非我将查询集中在一个集群上,否则无法弄清楚如何删除。我研究了测试示例,自己构建了许多测试页面,试图理解 ForestModel,据我所知这是不必要的......我发现的文档很少,我在网上找到的资源暗示 TreeGrid 可能不可靠......
所以我决定尝试在 dataGrid 中实现可展开/可折叠的行。
我扁平化了 JSON 数据并添加了另一个属性来指示它是顶级节点('alwaysShow' = true)。我以编程方式构建了我的网格并应用了 grid.filter() 来仅提取那些顶级节点。我通过扩展 ItemFileReadStore _FetchItems“过滤器”方法来修改该过滤器以允许 OR 查询而不是 AND,并且还修改它以允许键指向数组 - 当顶级节点(单元格中的小 +/- 图标)单击后,父节点的集群 ID 将添加到 grid.filter.allowed[] 并更新过滤器,从而允许显示具有该 cluster_id 值的节点。
这在我的五条记录的小测试集上运行良好(虽然我说有点迟缓......) - 但现在我从应用程序中拉回约 900 行,并在扩展大型集群(约 80 行)时我在过滤器更新上看到很长的蓝色和白色闪烁。我一天中的大部分时间都在尝试通过 firebug 来查找它发生的位置,但是 dojo 逻辑是如此分散。似乎在调用 _Grid.js defaultUpdate 之前发生。
太糟糕了,我正在考虑再次尝试使用 TreeGrid。我也在考虑用手做这件事……我因为花了这么多时间试图让 Dojo 开始工作而自责。如果有人有任何建议,我也会考虑使用商业“JSON->table with collapsible row”库...
有什么建议或见解吗?熟悉闪烁问题或如何使 TreeGrid 适应我的需求?我知道这有点啰嗦...非常感谢您的帮助。
-罗比
编辑:我最终放弃了尝试让 Dojo 做我需要的事情,并在不到一天的时间内自己编写了代码。三个星期不是最好的使用...
【问题讨论】:
标签: datagrid dojo dojox.grid treegrid