Вызов немодальной диалоговой функции при изменении значения ячейки

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

0 ответов

Другие вопросы по тегам