将变量从HtmlService发送到Google Apps脚本功能

时间:2015-01-21 18:03:23

标签: javascript google-apps-script

我有一个名为showModalReport()的Google Apps脚本函数,我传递了一个名为reportData的对象,该对象属于Javascript对象类型(它具有属性和值对)。此函数创建并提供HtmlTemplate:

function showModalReport(reportData) {

  var template = HtmlService.createTemplateFromFile('modalReport');

  template.reportData = reportData; // this makes reportData available in the HTML modal dialogue

  template = template.evaluate().setSandboxMode(HtmlService.SandboxMode.IFRAME);

  SpreadsheetApp.getUi().showModalDialog(template, 'Test Report');

}

然后这是我的modalReport.html文件:

<!DOCTYPE html>

Report Name: <?= reportData.name ?>

<input type="button" value="Email Report" onclick="onClickFunctions(???)" />

<script>

function onClickFunctions(reportData) {

  google.script.run.withSuccessHandler( function() { google.script.host.close(); }).emailReport(reportData);

}

</script>

对话框可以正常显示报告名称,因此我知道reportData变量可用。接下来我想要它,以便当用户点击按钮时,它会调用emailReport()函数,该函数会将报告数据通过电子邮件发送给某人,然后关闭模态对话框。

以下是emailReport()

function emailReport(reportData) {

  Logger.log('reportData: ' + reportData);

  // the email code

}

但是emailReport()函数需要将reportData对象作为参数传递,这是我坚持的部分。如何将reportData传递给emailReport()

我已经尝试过这些了:

onclick="onClickFunctions(reportData)" // the Javascript console outputs the error: "Uncaught ReferenceError: reportData is not defined"

onclick="onClickFunctions(<? reportData ?>)" // reportData gets sent in to the function but is null 

onclick="onClickFunctions(this.reportData)" // reportData gets sent in to the function but is null

知道如何将该变量发送给函数吗?

另外,我知道这里有许多与我类似的问题。我阅读并尝试了其中许多代码,并尝试了Google的HTMLService文档中推荐的内容,但我仍然陷入困境。

1 个答案:

答案 0 :(得分:1)

你可以JSON.stringify reportData并传递它:

template.reportData = reportData;
template.reportDataJSON = JSON.stringify(reportData);

然后:

onclick="onClickFunctions('<?= reportDataJSON ?>');

function emailReport(reportData) {
    var reportData = JSON.parse(reportData);
}