带有非唯一字段名称的开关返回字符串值而不是数组

时间:2018-11-14 13:36:55

标签: google-apps-script gmail-addons

我在Gmail插件中创建了一系列开关。
单击按钮后,我要访问开关的值。一些开关可以具有相同的字段名,这是我正在使用的设置 Switch :: setFieldName函数,如下所示:

var switchKeyValue = CardService.newKeyValue()
    .setSwitch(CardService.newSwitch()
        .setFieldName(email)
        .setValue(name));

稍后,我将使用以下方法遍历已发送表单的输入值(开关的值)

// "e" is the event object passed to the event listener
var form = e.formInput;
var emails = [];
for (key in form) {
    if (form.hasOwnProperty(key)) {
        emails.push(key);
    }
}

通常,您希望具有相同名称的字段的值将被覆盖,就像将它们添加到formInput对象中一样。
例如,如果我添加了3个带有字段名称“ car”和值(按此顺序)“ red”,“ blue”,“ green”的开关,则生成的表单将仅包含{“ car”:“ green”}。

但是,setFieldName函数的文档说:
“与其他表单字段不同,此字段名称不必唯一。使用相同字段名称的开关的表单输入值将作为数组返回。该数组由具有该字段名称的所有启用的开关的值组成。“

因此,人们希望收到类似{“ car”:[“ red”,“ blue”,“ green”]}的东西。
但是,我只获得每个开关的字符串值,而不是包含多个字符串的数组。

作为一种解决方法,我使用字符串(和拆分字符)的串联将字段名称设置为既包含原始字段名称又包含字段的值,以便获得一组所有小部件值。但是,这并不理想,因为我稍后必须拆分字符串以解析出键和字段的值。此外,如果分割字符是原始字段名称的一部分,它甚至可能不起作用。

基本上,我想收集表单的所有开关值,但需要跟踪相关的开关值(具有相同字段名称的开关值)。
实现此目标的最佳方法是什么?

0 个答案:

没有答案