Ag-grid - 使用自定义单元格编辑器时是否忽略了值解析器?

Ag-grid - Is value parser ignored when having custom cell editor?

我将 ag-grid 与 Angular v7 一起使用,我在值解析器方面遇到了一些问题,我想将其与自定义单元格编辑器一起使用。

当我声明自定义单元格编辑器时,值解析器似乎被简单地忽略了。我将它硬编码为始终 return 相同的值,无论参数如何,并且它做到了 - 当我从我的列定义中删除 cellEditor 时。一旦声明了自定义编辑器,解析器似乎就不再工作了——它对保存的值没有任何影响。它甚至没有被调用 - 我试图在其中记录一些东西,但当有自定义编辑器时它在控制台中不可见。

如果我错了请纠正我,但这不是预期的行为,是吗? Sine in docs value parser 和 setter 在 Cell Editing 文章中提到,所以我认为它们应该一起工作。

我在实现自定义单元格编辑器时有完全相同的疑问,其中 valueParser 似乎被网格完全忽略了。 因此,在查看 ag-grid 文档后,我找到了解决方案。 提供给单元格编辑器的agInit方法的params对象里面有如下属性

  parseValue: (value: any) => any;

此函数与您在专栏的 colDef 中编写的ValueParser 相同。 在自定义单元格编辑器的 getValue 方法中对返回的数据调用 parseValue()。

@abd995 parseValue 指向列定义中的函数是正确的。但是,如果按照文档的方式遵循它们的接口定义,则无法从 getValue 函数中调用 parseValue ,因为它们提供的示例没有帮助,例如xxx.prototype.getValue = function....

相反,在 init 函数中,您需要在其中声明 getValue 调用以访问 params 对象。

例如:

CodeValueEditor.prototype.init = function (params) {

        this.container = document.createElement('input');
        this.container.classList.add('ag-cell-edit-input');


        this.container.value = params.value;

        this.getValue = function () {
            var parseResult = params.parseValue(this.container.value);

            if (parseResult)
                return this.container.value;

            return params.value;
        };

通过检查结果,您可以 return 新值 - 或者如果失败 return 原始值 returning params.value.

我还没有对它进行广泛的测试,但它似乎可以工作并且允许我使用自定义编辑器并利用列定义的值解析器。

希望对您有所帮助! Ps。您可能需要针对范围调整上述 'this'。