【问题标题】:How can I add new sections to an existing card on Gmail Addon?如何在 Gmail Addon 上的现有卡片中添加新部分?
【发布时间】:2021-09-13 23:22:37
【问题描述】:

我实际上是在尝试使用带有应用脚本的插件在 Gmail 中创建聊天界面。所有的交互都在工作。但它会不断导航到不同的卡片,而不是将所有内容都放在一张卡片上。就像在 Google Tasks 中一样。

有没有一种方法可以让我动态地将部分添加到同一张卡片中以创建类似聊天的界面。

我假设如果在 Google Tasks Add-on 上可行,在这种情况下也应该可行。请帮助我,因为这是必要的要求。

【问题讨论】:

    标签: google-apps-script gmail-addons


    【解决方案1】:

    更新: 试试这个

        function renderRootCard(){
            var card = CardService.newCardBuilder();
            var section = CardService.newCardSection();
            var btnSet = CardService.newButtonSet();
            section.addWidget(CardService.newTextParagraph().setText("old widget"));
            section.addWidget(btnSet.addButton(addTaskBtn));
            card.addSection(section);
    
            var addTask = CardService.newAction().setFunctionName("addTask");
            var addTaskBtn = CardService.newTextButton()
                .setText("Add Task")
                .setOnClickAction(addTask); 
    
    
            return card.build();
        }
    
        function addTask(e) {
            var card = CardService.newCardBuilder();
            var section = CardService.newCardSection();
            var btnSet = CardService.newButtonSet();
            section.addWidget(CardService.newTextParagraph().setText("old widget"));
            section.addWidget(btnSet.addButton(addTaskBtn));
            section.addWidget(CardService.newTextParagraph().setText("new widget"));
    var addTask = CardService.newAction().setFunctionName("addTask");
            var addTaskBtn = CardService.newTextButton()
                .setText("Add Task")
                .setOnClickAction(addTask); 
            return CardService.newNavigation().updateCard(card.build());
        }
    

    原答案:

    简而言之:可能

    我明白你想要做什么。这涉及通过将当前卡更新为具有与当前卡相同的小部件以及所需的其他小部件的新卡来替换当前卡。

    假设您正在构建一个待办事项应用程序。当您单击添加任务(例如)时,您只需创建同一张卡片,添加一些小部件并将当前卡片替换为新卡片。

    【讨论】:

    • 是的!正是我想要达到的目标。但我没有遇到过代码示例或骨架。可以分享样品吗?
    • 我根据您的要求添加了。
    • 如果没有 updateCard 方法,这段代码不也能工作吗?对我来说,主要的一点是如何存储或传递现有卡的内容。
    • Akhil,代码有 updateCard 方法。此外,我找不到任何直接的方法来做到这一点,而不是在进行更新时再次重新绘制旧卡。为了保持旧卡的状态,通过 setParameters 方法将卡的状态传递给新卡。如果 CardService 允许我们将 Card 作为参数传递,我们就不必这样做了。
    • 如果我必须重新绘制整个对话,那么首先我需要将它们分开存储并每次重新创建卡片。 setParameters 也不起作用。也试过了。
    【解决方案2】:

    我对上面的代码进行了更正,现在可以了。 addTaskaddTaskBtndefinitions 表示在创建部分和卡片本身之前需要执行的操作。

    您还需要在addTask() 函数中构建card.addSection(section);

    function renderRootCard(){
            var card = CardService.newCardBuilder();
            var section = CardService.newCardSection();
            var btnSet = CardService.newButtonSet();
            var addTask = CardService.newAction().setFunctionName("addTask");
            var addTaskBtn = CardService.newTextButton()
                .setText("Add Task")
                .setOnClickAction(addTask); 
            section.addWidget(CardService.newTextParagraph().setText("old widget"));
            section.addWidget(btnSet.addButton(addTaskBtn));
            card.addSection(section);
    
            return card.build();
        }
    
        function addTask(e) {
            var card = CardService.newCardBuilder();
            var section = CardService.newCardSection();
            var btnSet = CardService.newButtonSet();
            var addTask = CardService.newAction().setFunctionName("addTask");
            var addTaskBtn = CardService.newTextButton()
                .setText("Add Task")
                .setOnClickAction(addTask); 
            section.addWidget(CardService.newTextParagraph().setText("old widget"));
            section.addWidget(btnSet.addButton(addTaskBtn));
            section.addWidget(CardService.newTextParagraph().setText("new widget"));
            card.addSection(section);
    
            return CardService.newNavigation().updateCard(card.build());
        }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-28
      相关资源
      最近更新 更多