我正在使用带有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}}