应用过滤器时删除CSS
我正在将SlickGrid与dataView一起使用。我已应用条件格式在网格加载时高亮显示特定行:应用过滤器时删除CSS,css,filter,slickgrid,Css,Filter,Slickgrid,我正在将SlickGrid与dataView一起使用。我已应用条件格式在网格加载时高亮显示特定行: grid.addCellCssStyles("highlight", rowColor); grid.invalidate(); dataView.syncGridCellCssStyles(grid, "highlight") grid.render(); 当应用过滤器时,我想删除css样式。我试过: grid.removeCellCssStyles("highlight"); dataVie
grid.addCellCssStyles("highlight", rowColor);
grid.invalidate();
dataView.syncGridCellCssStyles(grid, "highlight")
grid.render();
当应用过滤器时,我想删除css样式。我试过:
grid.removeCellCssStyles("highlight");
dataView.syncGridCellCssStyles(grid, "highlight")
应用过滤器时,将调用“渲染”两次。第一次成功删除样式,但第二次渲染运行时重新应用样式。onRowCountChanged第一次调用render时,onRowsChanged调用secod。在第二次渲染updateCellCssStylesOnRenderedRowsaddedHash上,removedHash似乎正在使用缓存的行版本重新应用样式。有趣的是,对于过滤器隐藏的所有行,样式都被清除,但未过滤的行保留样式。因此,当我移除过滤器时,隐藏的行移除了样式,但未过滤的行仍然高亮显示
旁白,我是个十足的傻瓜。非常感谢您的帮助
更新:在slick.dataview.js的syncgridcellcsstylesgrid中,我注释掉了storecellcsstylesgrid.getcellcsstyleskey;达到了我的预期效果。我显然不想编辑源代码作为最终解决方案,但希望这将有助于诊断问题。见下面的结果:
函数syncGridCellCssStylesgrid,键{
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;
}
});
}
grid.invalidate在内部调用render-因此在应用样式时会调用render两次。另外,在删除样式时也尝试过invalidate吗?明白了…我会纠正这一点。我所说的调用两次的render是在更新网格以应用过滤器时调用的。我尝试过invalidate、refresh、render等组合。我已经到了一个地步,我觉得我只是在黑暗中掷镖,而不了解它是如何工作的。我确实认为存储css样式的行缓存可能是问题所在,但我不知道为什么它没有为未筛选的行更新。grid.invalidate调用render内部-因此,在应用sty时,您要调用render两次莱斯。还有,你是否也尝试过在删除样式时使其无效?明白了……我会纠正这一点。我所说的两次调用的渲染是在我更新网格以应用过滤器时调用的。我尝试过使其无效、刷新、渲染,以及三者的组合。我已经到了一个地步,我觉得我只是在黑暗中投掷飞镖,而没有一个unde不管它是如何工作的。我确实认为存储css样式的行缓存可能是问题所在,但我不知道为什么它不更新未过滤的行。