【问题标题】:In Apps Script, How to change the value inside dropdown dynamically inside CardService?在 Apps 脚本中,如何在 CardService 中动态更改下拉列表中的值?
【发布时间】:2021-08-16 10:29:57
【问题描述】:

我在更改 AppsScript 中下拉列表的值时遇到问题。我实际上需要帮助来根据另一个下拉列表的选定值/项目更改下拉列表中的数据/列表。

我的问题是,我们如何在运行时添加/更改目标下拉列表中的值,即使它在此侧面板创建的一开始就使用其他值进行了初始化。

编辑-这是下拉菜单的屏幕截图。其中,"From""origin""To""destination"

我想要的是 - 例如如果在origin 下拉列表中,用户选择了“法语”,那么在destination 下拉列表中,它应该只显示“芬兰语”和“弗里斯兰语”。我怎样才能做到这一点?

以下是我用来在应用脚本侧面板中创建下拉菜单的代码。此代码在两个下拉列表中添加 LM 常量项。

const LM = [
    { text: 'Finnish', val: 'fi' },
    { text: 'French', val: 'fr' },
    { text: 'Frisian', val: 'fy' },
    { text: 'Galician', val: 'gl' },
    { text: 'Georgian', val: 'ka' },
    { text: 'German', val: 'de' },
     -----
     -----
     -----
  ]

function createSelectionCard(){

   builder.addSection(CardService.newCardSection()
    .addWidget(generateLanguagesDropdown('origin', 'From: ', DEFAULT_ORIGIN_LAN)
    .setOnChangeAction(CardService.newAction().setFunctionName('onSourceLanguageChange'))));

   builder.addSection(CardService.newCardSection()
    .addWidget(generateLanguagesDropdown('destination', 'To: ', destinationLanguage)));
}

function generateLanguagesDropdown(fieldName, fieldTitle, previousSelected) {
  var selectionInput = CardService.newSelectionInput().setTitle(fieldTitle)
    .setFieldName(fieldName)
    .setType(CardService.SelectionInputType.DROPDOWN);

  LM.forEach((language, index, array) => {
    selectionInput.addItem(language.text, language.val, language.val == previousSelected);
  })

  return selectionInput;
}

我在onSourceLanguageChange() 事件方法中获取所选项目。现在基于此选择,我需要更改下拉列表中的值“destination”

主要问题是,我们如何在运行时添加/更改目标下拉列表中的值,即使在创建此侧面板的一开始就使用其他值进行了初始化。强>

【问题讨论】:

  • “我想要的是 - 例如,在原产地下拉菜单中,用户选择了“法语”,然后在目的地下拉菜单中,它应该只显示“芬兰语”和“弗里斯兰语”。我怎样才能做到这一点?“你有这个从 -> 到任何地方的列表吗?
  • @Aerials 是的,我有这份清单。我的主要问题是,我们如何在目标下拉列表中添加/更改值,即使它在此侧面板创建的起点已被其他值初始化。

标签: google-apps-script dropdown add-on


【解决方案1】:

您必须在客户端(在您的 HTML 中使用 JS)监听用户何时选择源下拉列表中的选项。并使用google.script.run 发送信号以在服务器端执行一个函数,该函数会更改目标下拉列表中的选项。

阅读文档中的client-server communication 文章。

请注意他们如何使用 <script> 提供 HTML,其中包含一个函数“google.script.run”,该函数允许在服务器端调用函数。


更新:

您不得将HTML/CSS or client-side scripting 与附加组件一起使用。您应该使用Actions 与用户进行交互。

【讨论】:

  • 我的应用程序没有客户端-服务器的东西,或者如果我默认有它,我不确定从哪里可以得到它。我正在创建一个 gsuit 插件。在那里我只能与 json 文件和一些 .gs 文件进行交互,仅此而已。这些 HTML 和
  • 恐怕不可能我更新了我的答案以反映这一点。这是这里的限制之一:developers.google.com/workspace/add-ons/guides/…
  • @TanmayBairagi 对于您应该使用 Actions 的交互。我更新了我的答案以显示它。
猜你喜欢
  • 2012-07-03
  • 1970-01-01
  • 2011-08-02
  • 2020-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-11
相关资源
最近更新 更多