Вызов немодальной диалоговой функции при изменении значения ячейки
У меня есть список координат вершин на листе 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, чтобы обновления поступали своевременно, и не было необходимости в постоянном опросе.