将谷歌脚本对象传递给HTML模板

pass google script object to html template

本文关键字:HTML 模板 谷歌 脚本 对象      更新时间:2023-09-26

我使用HtmlService在Google脚本中开发独立的Web应用程序。下面是代码的一部分:

脚本:

function doGet() {
 getLabelsLists();
  return HtmlService
      .createTemplateFromFile('index')
      .evaluate().setSandboxMode(HtmlServi‌​ce.SandboxMode.NATIVE);
}
function getEmails() {
  var query = ...;
  var threads = GmailApp.search (query);
  return threads;
} 

索引.html:

<? var data = getEmails(); ?>
<table>
  <? for (var i = 0; i < data.length; i++) { 
  var message = data[i].getMessages()[0];
  ?>
    <tr onclick= click(<?= message.getId() ?>)>
        <td><?= message.getSubject() ?></td>
    </tr>
  <? } ?>
</table>

我想做的是在页面加载和单击调用函数上仅显示如下所示的按钮,该函数呈现带有结果的表格。

 <input type="button" onclick="google.script.run.getEmails()" />

有什么想法如何将 gmail 线程数组从 getEmail() 函数传递到视图并动态创建表吗?

您不能传递此类对象(带有函数和自定义原型),而只能传递"简单"对象(由字符串、数字、布尔值和数组或包含这些对象的对象组成),如文档中所述。因此,您将使用所需的值构建一个对象,以便传递它。以仅获取线程中第一条消息的 id 和主题的使用示例为例,以下是它是如何完成的:

function getEmails() {
  var query = "...";
  return GmailApp.search(query).map(function(thread) {
    var msg = thread.getMessages()[0];
    return {id:msg.getId(), subject:msg.getSubject()};
  }
}

然后,要"读取"值,您应该直接访问id,而不是调用 getId()subject ,而不是getSubject()