我有一个复杂的过滤操作,我正在尝试为ui-grid应用程序实现。基本上,我有一个包含大量列的大网格,每个列都在列的顶部有典型的过滤字段。这很有效。
然后我有一个额外的分析步骤,用户可以打开(这包括查找满足特定条件的行集,然后根据结果标记行是否可见) MUST 在所有其他过滤器之后逻辑应用(即它与所有列顶过滤器一样共享'交换属性')。这个额外的分析/过滤步骤旨在获取由柱顶过滤器产生的行集,然后应用这一个最终的,所有复杂的过滤步骤。
我能够获得过滤逻辑以产生最初正确的结果 - 当用户第一次点击进入特殊模式时,我执行分析并将必要的信息保存在网格的隐藏列中;然后RowsProcessor相应地设置row.visible属性。 (也许我不需要RowsProcessor,也许我可以在分析子程序中设置可见性。)但是无论如何 - 重点是行被标记为可见或不可见。当用户随后将过滤器添加/删除/更改为其中一个列顶部过滤器时,会出现此问题。必要时,额外的分析步骤需要基于根据列顶部过滤器可见的行。第一次进入特殊过滤例程时,对gridApi.core.getVisibleRows()
的调用将返回该行集。但在此之后,可见行集现在通过先前执行特殊过滤而减少。但我需要回到只有柱顶过滤器的行集(即完全重新计算row.visible属性),而不需要任何特殊的最终过滤。有没有办法做到这一点 - 有效地撤消RowsProcessor的过滤效果?
是否有某种方法可以根据列顶部过滤器强制重新计算可见行集?并且这样做是为了控制回来,以便执行额外的过滤步骤?
我查看了API中的各种内容,但无法分辨哪些内容可能对我有所帮助。例如:
在API的ui.grid(网格)部分,我看到许多不同风格的刷新方法可能有所帮助,但鉴于我的理解,没有区别。我希望我需要的那个不是refreshRows( )
说“目前不起作用”
此外,GridRow
'类'似乎有各种方法可言
可见性“覆盖” - 听起来可能就像我可能需要的那样
(我的最终可见性结果可能是对由柱顶过滤器计算的结果的覆盖)。但我尝试使用这些方法而不是直接设置row.visible,我没有看到任何区别。
有人可以建议我尝试一下吗?
甚至更好,是否有任何书面描述可以提供ui-grid功能的高级概述?我喜欢这个包,但是第一次使用它时,我只是很难处理可能的基本概念,而且可能我认为这个问题都错了。
再次感谢您的帮助。
答案 0 :(得分:2)
每当rowsProcessors运行时,他们首先将所有行设置为可见,然后每个rowsProcessor依次运行,前一个rowsProcessor的结果将传递给下一个。 RowsProcessors具有优先级,因此您可以将处理器设置为在序列中的适当位置运行。
听起来您的问题是您使用getVisibleRows来计算要做的事情,而不是查看传入行处理器的行,并根据该输入中可见的行进行评估。
我的猜测是你最好将rowsProcessor设置为具有高(后期)优先级,然后在该处理器内处理所有计算,而不是尝试将它们缓存在数据集本身上。如果需要从传递给处理器的renderableRows集中提取可见行,可以使用以下命令:
var visibleRows = renderableRows.filter( function(row) { return row.visible; });