如何在 Slickgrid 自定义单元格格式化程序中应用自定义过滤器格式化程序

How to apply custom Fliter formatter in a Slick grid custom cell formatter

如何在 slick-grid 自定义单元格格式化程序中应用自定义 angular 过滤器格式化程序

假设我有一个 angular 客户过滤器格式化程序,可以将日期从一种格式转换为另一种格式。

var dateFilter = this.$filter('myDateFilterFormatter')('2006-04-07'); 

它 returns 作为 4/7/06。

如何在 slick-grid 自定义单元格格式化程序中使用 myDateFilterFormatter

我试过这种方法

this.dateFommatter = function(row, cell, value, columnDef, dataContext){
            return "<p>"+ value | myDateFilterFormatter +"</p>";
        };

并尝试

this.dateFommatter = function(row, cell, value, columnDef, dataContext){
                return "<p>"+ this.$filter('myDateFilterFormatter')(value) +"</p>";
            };

两种方式都以错误结束。我无法在 slick-grid 行格式化程序中应用自定义过滤器。你能建议我如何在 slick-grid 中使用自定义过滤器吗?

dateFormatter函数里面的

this指的是函数本身。

通常使用

var self = this;

... code ...

this.dateFommatter = function(row, cell, value, columnDef, dataContext){
    return "<p>"+ self.$filter('myDateFilterFormatter')(value) +"</p>";
};

为了回答您的第二个查询,调用格式化程序的代码是,例如

function updateCell(row, cell) {
  var cellNode = getCellNode(row, cell);
  if (!cellNode) {
    return;
  }

  var m = columns[cell], d = getDataItem(row);
  if (currentEditor && activeRow === row && activeCell === cell) {
    currentEditor.loadValue(d);
  } else {
    cellNode.innerHTML = d ? getFormatter(row, m)(row, cell, getDataItemValueForColumn(d, m), m, d) : "";
    invalidatePostProcessingResults(row);
  }
}

我想你问的是获取 cellNode 的权限。 您可以添加

var cellNode = grid.getCellNode(row, cell);

如果你愿意,给你的格式化程序。

在长 运行 中,如果您发现访问单元节点很有用,您可以修改 formatter 函数以及对它的所有调用,以添加 cellNode 到参数列表的末尾。但是,这将是对 slickgrid 代码的修改。

编辑:实际上我刚刚对此进行了测试,但它不起作用,因为在创建单元格时会在创建单元格之前调用格式化程序。我已经修改了最新版本的 SlickGrid 中的格式化程序,这样您就可以选择 return 对象 { text: 'displayText', removeClasses: 'class1 class2', addClasses: 'class1' } 而不是 returning 字符串,并且 classes 将被删除并且应用格式化程序时添加到单元格。删除一系列 classes 允许在应用正确的新 class.

之前清除以前的格式 classes