Как получить доступ к массиву объектов, отправленных через шаблон HtmlService? - PullRequest
1 голос
/ 11 марта 2020

Я пытаюсь научиться Apps Script. На странице я хочу иметь возможность выбрать переключатель для выбора языка, а затем он будет воспроизводить аудиофайл выбранного языка - файлы находятся в папках дисков по языку. На каждой странице около 150 фраз на 10 языках. Я получил его для работы с google.script.run, но он не работает, потому что он запускает скрипт слишком много раз. Поэтому я подумал, что было бы неплохо передать их как массив объектов через HtmlService.createTemplateFromFile.

Я использовал это в файле .gs - думаю, это сработало.

function doGet(){
  var tmp = HtmlService.createTemplateFromFile('index')
  tmp.audioUrls = getDownloadUrls()
  return tmp.evaluate()
}

Массив audioUrls выглядит следующим образом [{name: "blah", language: "blah", url: "https ..."} ....]

Я использую следующий скрипт в моем файле html, чтобы назначить URL-адрес в качестве аудио sr c:

function loadAudio(){
  var a = document.getElementsByTagName('audio');
  for (var i = 0, l = audios.length; i<l; i++){
    var myId = a[i].id;
    var qText = a[i].title;
    var lang = language = document.querySelector('input[name="language"]:checked').value;

    var result = audioUrls.find(file => file.name === qText +".m4a" && file.language ===    lang);

    document.getElementById(myId).setAttribute('src', result.url);
    }
}

Полученная ошибка говорит о том, что audioUrls.find не определен - это массив, который я включил в шаблон HtmlService. Может ли кто-нибудь указать мне правильное направление, чтобы выяснить, как получить доступ к объектам в этом массиве? Очень признателен! Поскольку я учусь, я уверен, что есть много неправильных вещей, но я могу понять это на этом уровне. Чем проще, тем лучше. Спасибо.

1 Ответ

2 голосов
/ 11 марта 2020
  • Вы хотите использовать объект, извлеченный из getDownloadUrls() скрипта Служб Google, в шаблон HTML.

Если мое понимание верно, как насчет этого ответа? Пожалуйста, подумайте об этом как об одном из нескольких возможных ответов.

Точка модификации:

  • В этом случае, чтобы использовать audioUrls при HTML, он устанавливает значение извлекается из getDownloadUrls() как строка, а строка анализируется как объект на стороне HTML.

Изменен скрипт:

Когда ваш скрипт модифицируется, пожалуйста, измените как

Сторона скрипта Google Apps:

function doGet(){
  var tmp = HtmlService.createTemplateFromFile('index');
  tmp.audioUrls = JSON.stringify(getDownloadUrls());  // Modified
  return tmp.evaluate();
}

HTML & Javascript сторона:

function loadAudio(){
  const audioUrls = JSON.parse(<?= audioUrls ?>);  // Added

  var a = document.getElementsByTagName('audio');
  for (var i = 0, l = audios.length; i<l; i++){
    var myId = a[i].id;
    var qText = a[i].title;
    var lang = language = document.querySelector('input[name="language"]:checked').value;

    var result = audioUrls.find(file => file.name === qText +".m4a" && file.language ===    lang);

    document.getElementById(myId).setAttribute('src', result.url);
  }
}

Примечание:

  • В вашем случае, когда вы изменили сценарий веб-приложений, пожалуйста, повторно разверните веб-приложения в качестве новой версии. Таким образом, последний скрипт отражается на веб-приложениях. Пожалуйста, будьте осторожны.

Ссылка:

Если я неправильно понял ваш вопрос, а это не то направление, которое вы хотите, прошу прощения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...