应用过滤器时,Slickgrid会删除CSS

时间:2012-10-12 13:23:05

标签: css filter slickgrid

我正在使用带有dataView的SlickGrid。当网格加载时,我已应用条件格式以突出显示特定行:

grid.addCellCssStyles("highlight", rowColor);
grid.invalidate();
dataView.syncGridCellCssStyles(grid, "highlight")
grid.render();

当应用过滤器时,我想删除css样式。我试过了:

grid.removeCellCssStyles("highlight");
dataView.syncGridCellCssStyles(grid, "highlight")

应用过滤器时,会调用render()两次。第一次成功删除了样式,但第二次render()运行时,它会重新应用。 render()第一次调用onRowCountChanged()onRowsChanged()调用updateCellCssStylesOnRenderedRows(addedHash, removedHash)。看来在第二次渲染时,syncGridCellCssStyles(grid, key)正在使用行的缓存版本来重新应用样式。有趣的是,样式被清除了过滤器隐藏的所有行,但未过滤的行保留了样式。因此,当我删除过滤器时,隐藏的行会删除样式,但未过滤的行仍会突出显示。

旁注,我是一个总菜鸟。非常感谢任何帮助。

slick.dataview.js中的

更新:storeCellCssStyles(grid.getCellCssStyles(key));,我评论了 var hashById; var inHandler; // since this method can be called after the cell styles have been set, // get the existing ones right away //storeCellCssStyles(grid.getCellCssStyles(key)); function storeCellCssStyles(hash) { hashById = {}; for (var row in hash) { var id = rows[row][idProperty]; hashById[id] = hash[row]; } } grid.onCellCssStylesChanged.subscribe(function(e, args) { if (inHandler) { return; } if (key != args.key) { return; } if (args.hash) { storeCellCssStyles(args.hash); } }); this.onRowsChanged.subscribe(function(e, args) { if (hashById) { inHandler = true; ensureRowsByIdCache(); var newHash = {}; for (var id in hashById) { var row = rowsById[id]; if (row != undefined) { newHash[row] = hashById[id]; } } grid.setCellCssStyles(key, newHash); inHandler = false; } }); } 并取得了我想要的结果。我显然不想编辑源代码作为我的最终解决方案,但希望这有助于诊断问题。见下面的结果:

  

function syncGridCellCssStyles(grid,key){

{{1}}

0 个答案:

没有答案