我有一个名为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文档中推荐的内容,但我仍然陷入困境。
答案 0 :(得分:1)
你可以JSON.stringify reportData并传递它:
template.reportData = reportData;
template.reportDataJSON = JSON.stringify(reportData);
然后:
onclick="onClickFunctions('<?= reportDataJSON ?>');
和
function emailReport(reportData) {
var reportData = JSON.parse(reportData);
}