SlickGrid在排序后重新应用/修复过滤器

SlickGrid re-apply/fix filter after sort

本文关键字:应用 过滤器 排序 新应用 SlickGrid      更新时间:2023-09-26

我是建立在树/扩展/折叠SlickGrid的例子在这里找到。

我已经给它添加了排序(在% Complete列上),但是一旦排序被用户触发,过滤器就不会更新——展开/折叠图标不起作用并且在错误的地方。

排序后如何重新应用筛选器?我试过使用下面的代码,但它不起作用:

 dataView.setFilter(myFilter);
 grid.render();

你可以看到我这里有很多

我注意到当我打开jsFiddle页面的html部分可以显示为空白,如果你刷新页面的代码似乎出现。

我设法创造了一个丑陋的工作环境。你可以在这里找到一个更新的例子

基本上,我对数据进行排序,然后销毁并重新创建网格。我还是想知道是否有更优雅的解决方法。

你的fiddle链接实际上不运行在我的机器上,但是从阅读你的源代码,你要么必须重建DataView,要么你必须强制你的DataView触发过滤器重新创建所有的缩进和折叠/展开元素。

强制刷新的最简单方法是调用grid.invalidate(),然后调用grid.render()。如果这不起作用,你可以在每个元素上调用updateItem(),因为它是排序的。这两种方法都将强制网格重新计算行索引和这些索引的视觉效果。

注意,你必须小心排序,因为父关系不是强制的行排序——也就是说,一个项目(id 2)的子(id 5)可以诉诸于其父(id 2)上面的第1行,折叠父仍然会使它消失。看起来你的排序算法已经处理了这个问题,但是对于其他阅读这个问题的人来说,这是很重要的一点。