【问题标题】:How to call async function from valueFormatter in ag-grid如何从 ag-grid 中的 valueFormatter 调用异步函数
【发布时间】:2020-07-09 16:01:43
【问题描述】:

我有一个 ag-grid 表,其中有一列带有值格式化程序:

{
    headerName: "My column",
    valueFormatter: getFormattedIndexValue,
    ...
}

来自getFormattedIndexValue我尝试调用异步函数:

async function getFormattedIndexValue (params) {
    if (!params.value) return;
    return await getDecodedValue(table, params.colDef.field, params.value);
}

这是异步函数的代码,我尝试调用:

async function getDecodedValue(table, field, value) {
    const query = `function=decode&table=${table}&field=${field}&value=${value}`;
    const response = await fetch('routines.php', { method: 'post', body: query, headers: {"Content-Type": "application/x-www-form-urlencoded"}});
    return response.text();
}

但是这样 valueFormatter 不会返回正确的值,导致[Object Promise]。有没有办法从 valueFormatter 调用异步函数并获得正确的结果

【问题讨论】:

    标签: javascript async-await ag-grid


    【解决方案1】:

    但据我了解,您想要有某种参考(值的键、数据库上的 id(作为键)和视图网格上的值(作为显示的值))——我说的对吗?

    如果是这样,(应该使用valueFormattervalueParser)但没有异步调用, 您需要在 grid-init 进程中有您的键值对(字典)。

    这是我的例子:

    在 ag-grid 初始化过程中,我正在为 config.ComboData 中的列保存字典

    valueFormatter = (params) => {
        return this.lookupValue(config.ComboData['columnNameHere'], params.value);
    };
    valueParser = (params) => {
         return this.lookupKey(config.ComboData['columnNameHere'], params.newValue);
    }
    

    valueFormatterparams.value - 在 ag-grid 渲染值时使用。

    valueParserparams.newValue - 当您更新单元格值时。

    这里looupValuelookupKey函数from ag-grid docthe sample

    lookupValue(mappings, key:string) {
        return mappings[key];
    }
    
    lookupKey(mappings, name) {
        for (var key in mappings) {
            if (mappings.hasOwnProperty(key)) {
                if (name === mappings[key]) {
                return key;
                }
            }
        }
    }
    

    【讨论】:

    • 我明白了,现在我使用映射,使用 PHP 从 DB 中创建它们,但是我的表是动态创建的并且非常复杂,这些映射在项目中造成了垃圾。此外,如果我想加入另一个表,我需要打印额外的映射。单元格渲染器不会有用,因为在过滤器中,id 是以这种方式渲染的,而不是名称(即 1=>'BILLA', 2=>'SPAR', 3=>'L\'etoile', ..., and如果单元格渲染器 1、2、3 在过滤器中但不明确商店名称
    • @PavelSumarokov 您正在重叠问题,尝试一个一个地解决它们并为每个帖子创建一个问题,因为在这里您混合了其中的几个,我无法确定您要解决哪个问题.
    猜你喜欢
    • 2020-05-09
    • 1970-01-01
    • 2018-09-08
    • 2021-03-25
    • 1970-01-01
    • 2020-09-08
    • 2020-03-09
    • 2015-01-22
    • 2017-09-28
    相关资源
    最近更新 更多