应用过滤器时删除CSS

应用过滤器时删除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

我正在将SlickGrid与dataView一起使用。我已应用条件格式在网格加载时高亮显示特定行:

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样式的行缓存可能是问题所在,但我不知道为什么它不更新未过滤的行。