我在Google工作表中有一个顶点坐标列表,还有一个无模态对话框,其中包含根据此数据生成的svg图形。
更新顶点数据时,我也希望svg图形也自动更新。
我知道无模式对话框或侧边栏在客户端运行,并且显然需要访问服务器端以检索最新数据。好吧,除非有某种方法可以访问工作表数据的本地副本,否则我会怀疑。
因此,目前,我经常从html形式调用服务器端函数,如下所示:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
<script>
function setValue(value) {
var c = document.getElementById("container");
if (!c) return;
c.innerText = value;
}
value = 0;
function onTimer() {
google.script.run.withSuccessHandler(function(pollData) {
setValue(JSON.stringify(pollData));
window.setTimeout(onTimer, 1000);
}).modelessPoll();
}
onTimer();
</script>
</head>
<body>
<h1>Picking up data from the sheet...</h1>
<div id="container">
</div>
<input type="button" value="Close" onclick="google.script.host.close()" />
</body>
</html>
这是Apps脚本:
function openModelessDialog() {
var html = HtmlService.createHtmlOutputFromFile('modeless-dialog')
.setWidth(350)
.setHeight(300);
SpreadsheetApp.getUi()
.showModelessDialog(html, 'Model')
}
function modelessPoll() {
var spreadsheet = SpreadsheetApp.getActive();
var cc = spreadsheet.getCurrentCell();
return {
address: cc.getA1Notation(),
value: cc.getValue(),
fill: cc.getBackground()
}
}
这种作品。因此,现在我的计划是引入一个布尔变量,只要顶点坐标范围内的单元格值发生变化,该变量就会更新为true,而modelessPoll()函数仅在与上一次调用不同时才返回新数据。
我对此解决方案不满意的是,轮询感觉就像是一种资源浪费的方法。但是我想知道是否还有其他解决方案,例如通过websocket与服务器保持开放线路,从而使更新以及时的方式到达,并且不需要进行持续轮询。