将google脚本对象传递给html模板

时间:2014-11-17 17:35:33

标签: javascript html google-apps-script

我使用HtmlService在Google脚本中处理独立的网络应用。这是代码的一部分:

脚本:

function doGet() {
 getLabelsLists();
  return HtmlService
      .createTemplateFromFile('index')
      .evaluate().setSandboxMode(HtmlServi‌​ce.SandboxMode.NATIVE);
}

function getEmails() {
  var query = ...;
  var threads = GmailApp.search (query);
  return threads;
} 

的index.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()" />

我是如何将getEmails()函数中的gmail线程数组传递给视图并动态创建表的?

1 个答案:

答案 0 :(得分:3)

你不能传递这样的对象(带有功能和自定义原型),只能&#34;简单&#34;一些(由字符串,数字,布尔值和数组或包含这些的对象组成),如the documentation中所述。因此,您将使用所需的值构建一个对象以传递它。以您的使用示例获取线程中第一条消息的ID和主题,这里是如何完成的:

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

然后,去&#34;阅读&#34;这些值,您应该直接访问id,而不是调用getId()subject,而不是getSubject()