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

时间:2013-01-04 15:46:25

标签: javascript slickgrid

我正在构建树/展开崩溃SlickGrid示例找到here

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

排序后如何重新应用文件管理器? 我尝试使用下面的代码,但它不起作用:

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

你可以看到我有here

的小提琴

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

更新 我设法创造了一个丑陋的工作。您可以找到更新的示例here

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

1 个答案:

答案 0 :(得分:0)

你的小提琴链接实际上并没有为我的机器运行,但是从阅读你的源代码你要么必须重建DataView,要么你必须强制你的DataView触发fitler重新创建所有的缩进并折叠/ expand elements。

强制刷新的最简单方法是调用grid.invalidate(),然后调用grid.render()。如果这不起作用,您可以在每个元素上调用updateItem()进行排序。这些中的任何一个都会强制网格重新计算行索引和这些索引的视觉效果。

请注意,您必须小心排序,因为父级关系不会强制在行排序上 - 也就是项目(id 2)的子级(id 5)可以使用它的父级之上的第1行并且折叠父母仍然会让它消失。看起来您的排序算法已经处理了这个问题,但对于其他人来说这是一个重要的观点。