2

我正在开发一个使用 ExtJS 4.1 的项目

我需要用过滤器实现一个树形网格。根据我阅读各种文章、博客和 SO 帖子的理解,ExtJS 不提供带有树存储的过滤机制,我们需要编写自己的过滤机制。

对于过滤,建议使用两种方法:1)将数据加载到树形网格中,然后根据过滤条件显示/隐藏节点 2)操作存储(复制数据并从存储中删除记录)

我尝试了第一种方法。它与测试数据(大约 30 个节点)完美配合。但是对于生产数据的快照,我在 IE 和 FireFox 中遇到了“无响应的脚本”错误。使用 Chrome,它运行良好。

基本上生产数据库有大量数据,大约 3500 条记录,在树形网格中形成大约 900 个节点。我怀疑,一旦填充了树存储,在将所有 900 个节点渲染到树网格中时,我会收到“无响应脚本”错误。

我是 ExtJS 的新手,不确定解决这个问题的最佳方法是什么。我想知道,过滤如何在网格上工作。我可以为树网格复制相同的过滤机制吗?

欢迎任何解决此问题的建议。

4

2 回答 2

1

如果您可以使用带有分组的网格而不是树,那么您可以使用带有分页的过滤的网。如果没有,那么您可以使用类似Ext.grid.plugin.BufferedRenderer的东西,它也可以用于 TreePanel,但它仅在 4.2 上可用。如果这些都不是您的解决方案,那么您必须创建自己的自定义过滤才能为您处理分页。

于 2013-02-05T19:01:33.990 回答
0

我发现在每个节点的展开事件上加载子节点是最小化树面板的 dom 交互的一种不错的方法。这样,当您过滤时,它只需要过滤树结构的第一级而不是整个事物。我现在让它在一个访问控制管理应用程序中工作,该应用程序在一个树面板中处理大约 350 个资源,另外两个具有大约 75 个节点,每个节点通过事件链接在一起。这种方法没有明显的 UI 滞后,但我还没有将它扩展到你的规模,这在很大程度上取决于你的树的第一级中有多少项目是否适合你。

于 2013-02-05T22:48:10.380 回答