0

我正在使用 Google Workspace 插件为 Gmail 创建一个 CRM 助手。除了 SMS 提供程序之外,我几乎已经构建了所有功能。现在,我有一个带有表单输入和按钮的表单部分,如下所示。

function createSendSMSSection(phone, client) {
  let section = CardService.newCardSection();

  let input = CardService.newTextInput()
    .setFieldName("sms_input")
    .setTitle("Type in a SMS message here!")
    .setMultiline(true);
  input.setOnChangeAction(CardService.newAction().setFunctionName("handleInputChange"));

  let button = CardService.newTextButton()
    .setText("SEND")
    .setTextButtonStyle(CardService.TextButtonStyle.FILLED)
    .setDisabled(true);
  let action = CardService.newAction()
    .setMethodName("sendSMS")
    .setParameters({ "phone": phone, "clientjson": JSON.stringify(client) });
  button.setOnClickAction(action);


  let kv = CardService.newKeyValue()
    .setContent(' ')
    .setButton(button);

  section.addWidget(input);
  section.addWidget(kv);
  return section;
}

默认情况下,发送按钮处于禁用状态。我对本节的意图是用户将文本输入到 中input,这将调用handleInputChange(). 此函数将检查表单输入是否有任何内容,如果有,则启用发送按钮。但是,当我尝试这样做时:

function handleInputChange(event) {
  const inputarr = event.formInputs["sms_input"];
  let input = ''
  if (inputarr)
  {
    for (inputrow of inputarr) {
      input = " " + inputrow;
    }
  }

  input = input.trim();

  if (input && input != '') {
    State.SENDDISABLED = false;
    State.SMS_Body = input;
  }
  else {
    State.SENDDISABLED = true;
    State.SMS_Body = null;
  }
}

按钮的状态根本没有改变!我知道我可以使用启用按钮创建一张新卡,然后调用updateCard()用新卡替换旧卡。但是,这会产生非常滞后的体验,因为必须在第一次击键时创建一张新卡。有什么方法可以在不渲染新卡的情况下更新此按钮的状态?

4

1 回答 1

1

我假设该handleInputChange函数被正确调用,但它无法激活按钮。您可以进行一项简单的更改来正确刷新按钮:updateCard()在更新禁用的布尔值之后使用该方法。使用此方法开发解决方案的一种方法是包括以下行:

CardService.newNavigation().updateCard(yourCardObject);
于 2021-11-08T12:32:08.363 回答