我有一个对话框,我通过Google Apps脚本中的html服务进行显示。在对话框中,我调用了一个google脚本函数(openFormSidebar
),该函数打开一个带有成功处理程序的侧栏以关闭对话框。
对话框中的HTML
<button
onclick="google.script.run.withSuccessHandler(google.script.host.close()).openFormSidebar()">
Create Form</button>
问题是在打开侧边栏之前对话框正在关闭(成功处理程序正在运行)。
gs代码
function openFormSidebar () {
var html = HtmlService.createHtmlOutputFromFile('FormSidebar')
.setTitle('Form Creation')
.setWidth(300)
.setSandboxMode(HtmlService.SandboxMode.IFRAME);
SpreadsheetApp.getUi() // Or DocumentApp or FormApp.
.showSidebar(html);
}
即使我将openFormSidebar
函数设为简单的记录器语句(即Logger.log('test')
),它也不会执行(没有记录任何内容)。
我错过了什么?为什么会这样?
答案 0 :(得分:1)
google.script.run.withSuccessHandler(google.script.host.close()).openFormSidebar()
调用 google.script.host.close()
,然后将其返回值传递到google.script.run.withSuccessHandler
,与foo(bar());
调用的方式完全相同 bar
然后将其返回值传递给foo
。
您希望传递一个函数引用:
google.script.run.withSuccessHandler(function() { google.script.host.close() }).openFormSidebar()`
或可能
google.script.run.withSuccessHandler(google.script.host.close.bind(google.script.host)).openFormSidebar()`
Function#bind
返回一个函数,该函数在调用时调用具有给定this
值的原始函数。因此,google.script.host.close.bind(google.script.host)
会创建一个函数,在调用时,会调用google.script.host.close
并将this
设置为google.script.host
。
答案 1 :(得分:1)
实际上只是在关闭后删除()应该按照预期的方式工作。