[英]【Google Apps Script】 How to create a chain of dialogs in one html file
I want to create a chain of dialog as shown above, using HtmlService in GoogleAppsScript.我想使用 GoogleAppsScript 中的 HtmlService 创建如上所示的对话框链。
I already know how to create it by preparing multiple HTML files.我已经知道如何通过准备多个 HTML 文件来创建它。
But now, I'm wondering if it can be achieved by preparing ONLY ONE HTML file.但是现在,我想知道是否可以通过只准备一个 HTML 文件来实现。
If you know the solution, please let me know.如果您知道解决方案,请告诉我。
The original spreadsheet and my code is available in https://docs.google.com/spreadsheets/d/1z4bF0lKuofZO6c9VM1DTT82T3C4ypiiWYq5QkA3NNOw/edit?usp=sharing .原始电子表格和我的代码可在https://docs.google.com/spreadsheets/d/1z4bF0lKuofZO6c9VM1DTT82T3C4ypiiWYq5QkA3NNOw/edit?usp=sharing中找到。 please copy in your google drive.
请复制到您的谷歌驱动器。
(I'm sorry if there are any difficult-to-read parts...) (如果有任何难以阅读的部分,我很抱歉......)
My code: test.gs我的代码: test.gs
const ui = SpreadsheetApp.getUi();
const template = HtmlService.createTemplateFromFile('dialog');
function func(){
template.textForForm_1 = 'What is your name ?';
template.textForForm_2 = 'Dummy Text for Form2'; //form_2 in HTML is initially non-displayed but exist. So dummy text has to be prepared.
ui.showModalDialog(template.evaluate(),'test');
}
function func02(name) {
template.textForForm_1 = 'Dummy Text for Form1';
template.textForForm_2 = `Hello, ${name}. How old are you ?`;
//By the code below, create another dialog ...it is not what i want to realize.
//I wonder if there is any command refresh the html only..
ui.showModalDialog(template.evaluate(),'test');
}
dialog.html对话.html
<!DOCTYPE html>
<html lang="ja">
<head>
<base target="_top">
<style>
#form_2 {
display: none;
}
</style>
</head>
<body>
<div id="form_1">
<p><?=textForForm_1 ?></p>
<input type="text" id="userName">
<input type="button" id="ok_1" value="OK">
<input type="button" value="cancel" onclick="google.script.host.close()">
</div>
<div id="form_2">
<p><?=textForForm_2 ?></p>
<input type="number" min="0" max="100" id="age">
<input type="button" id="ok_2" value="OK">
<input type="button" value="cancel" onclick="google.script.host.close()">
</div>
</body>
<script>
document.getElementById("ok_1").onclick = function(){
document.getElementById("form_1").style.display = "none";
const userName = document.getElementById("userName").value;
google.script.run.func02(userName);
document.getElementById("form_2").style.display = "block";
}
</script>
</html>
Result A new dialog is generated instead of switching from Form 1 to Form 2.结果生成一个新对话框,而不是从 Form 1 切换到 Form 2。
In your situation, how about the following modification?在您的情况下,以下修改如何?
func02
is run, dialog
is reopened using template.textForForm_1 = 'Dummy Text for Form1';
func02
时,使用template.textForForm_1 = 'Dummy Text for Form1';
重新打开dialog
; and template.textForForm_2 = `Hello, ${name}. How old are you?`;
template.textForForm_2 = `Hello, ${name}. How old are you?`;
template.textForForm_2 = `Hello, ${name}. How old are you?`;
. <div id="form_2">
is display: none
.<div id="form_2">
是display: none
。document.getElementById("form_2").style.display = "block";
document.getElementById("form_2").style.display = "block";
is run before google.script.run.func02(userName);
google.script.run.func02(userName);
is finished.<!DOCTYPE html>
<html lang="ja">
<head>
<base target="_top">
<style>
<?!= sample ?> {
display: none;
}
</style>
</head>
<body>
<div id="form_1">
<p><?= textForForm_1 ?></p>
<input type="text" id="userName">
<input type="button" id="ok_1" value="OK">
<input type="button" value="cancel" onclick="google.script.host.close()">
</div>
<div id="form_2">
<p><?= textForForm_2 ?></p>
<input type="number" min="0" max="100" id="age">
<input type="button" id="ok_2" value="OK">
<input type="button" value="cancel" onclick="google.script.host.close()">
</div>
</body>
<script>
document.getElementById("ok_1").onclick = function(){
document.getElementById("form_1").style.display = "none";
const userName = document.getElementById("userName").value;
google.script.run.withSuccessHandler(_ => {
document.getElementById("form_2").style.display = "block";
}).func02(userName);
}
</script>
</html>
const ui = SpreadsheetApp.getUi();
const template = HtmlService.createTemplateFromFile('dialog');
function func() {
template.textForForm_1 = 'What is your name ?';
template.textForForm_2 = 'Dummy Text for Form2';
template.sample = "#form_2";
ui.showModalDialog(template.evaluate(), 'test');
}
function func02(name) {
template.textForForm_1 = 'Dummy Text for Form1';
template.textForForm_2 = `Hello, ${name}. How old are you ?`;
template.sample = "#form_1";
ui.showModalDialog(template.evaluate(), 'test');
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.