我将 SlickGrid 与 dataView 一起使用。当网格加载时,我应用了条件格式来突出显示特定行:
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)
正在使用行的缓存版本来重新应用样式。有趣的是,过滤器隐藏的所有行的样式都会被清除,但未过滤的行会保留样式。因此,当我删除过滤器时,隐藏的行已删除样式,但未过滤的行仍突出显示。
附注,我是一个完全的菜鸟。任何帮助是极大的赞赏。
更新:在 slick.dataview.js, 中syncGridCellCssStyles(grid, key)
,我注释掉storeCellCssStyles(grid.getCellCssStyles(key));
并达到了我想要的结果。我显然不想编辑源代码作为我的最终解决方案,但希望这将有助于诊断问题。见下面的结果:
函数syncGridCellCssStyles(网格,键){
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; } }); }