【发布时间】:2017-03-06 20:30:16
【问题描述】:
大家好,提前感谢您的帮助。 这是我的问题:
我正在通过 HTML 模板从库中开发电子表格工具,但服务器功能不起作用。
gs简化代码(功能较长):
function Cancel_Version(){
return Action_Box("¡HEY!","You're to cancel active edition.\n\n Sure?","Cancel_Version2()");
}
function Action_Box(TITLE,MESSAGE,FUNCTION){
var html = HtmlService.createTemplateFromFile('ACTION_BOX');
html.data = MESSAGE;
html.action = FUNCTION;
SpreadsheetApp.getUi().showModalDialog(html.evaluate().setHeight(200),TITLE);
}
function Cancel_Version2(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
ss.deleteActiveSheet();
}
HTML 代码:
<!DOCTYPE html>
<?!= include('CSS'); ?>
<form style="font-size: 22px; font-family: 'calibri'; ">
<?!= data; ?>
<br>
<br>
<input type="button" value="ACCEPT" onclick="<?!= action; ?>; google.script.host.close();"/>
<input type="button" value="CANCEL" onclick="google.script.host.close();"/>
</form>
为什么代码操作不起作用?即使我已经用Cancel_Version2() 替换了<?!= action; ?>,但仍然无法正常工作。另一方面,如果我直接从 onOpen 菜单调用该函数,它就可以工作。
我错过了什么???追了这么多天,求指教!!
【问题讨论】:
-
scriptlet
<?!= action; ?>不是指函数。所以,如果你试图从服务器返回一个函数名,那是行不通的。您可以从服务器获取全局变量。但我在您的服务器代码中没有看到任何名为action的全局变量。如果您要完成的是能够从同一个按钮调用不同的服务器功能,那么更改功能名称的标准是什么?您可以使用相同的服务器函数名称:google.script.run.alwaysTheSameFunctionName(different value)但发送不同的值,并导致该函数 -
根据传递给服务器的值分支到其他不同的函数。您可以在服务器上运行返回正确 google.script.run 文本的函数:
<?!= serverFunctionToGetCorrectCode() ?>然后在 .gs 代码中:function serverFunctionToGetCorrectCode() { if (1===1) {return 'google.script.run.myServerFunctionOne()';}} -
嗨桑迪。感谢您的回答。你是对的,我的目的是将不同的函数作为纯文本传递。通过“动作”变量。无论如何,忘记这一点,如果我得到这个并直接放置函数名称,它仍然会失败。为什么?
标签: javascript html google-apps-script