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

时间:2018-12-14 12:03:59

标签: ag-grid ag-grid-angular

我在Angular v7中使用了ag-grid,而我想在自定义单元格编辑器中使用的值解析器存在一些问题。

当我声明自定义单元格编辑器值解析器时,似乎只是被忽略了。我将其硬编码为无论参数如何都始终返回相同的值,并且做到这一点-当我从列定义中删除cellEditor时。声明了自定义编辑器后,解析器似乎不再起作用-它对保存的值没有任何影响。它甚至没有被调用-我试图在其中记录一些内容,并且当有自定义编辑器时,它在控制台中不可见。

如果我错了,请纠正我,但这不是预期的行为,或者是吗? “单元格编辑”文章中提到了文档值解析器和设置器中的正弦波,因此我认为它们应该一起工作。

2 个答案:

答案 0 :(得分:1)

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

  parseValue: (value: any) => any;

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

答案 1 :(得分:0)

@ 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;
        };

通过检查结果,您可以返回新值-如果返回失败,则可以返回params.value

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

希望这会有所帮助! 附言您可能需要调整上述“ this”的范围。