Я только начал изучать Apps Script. Кажется, я не могу установить для iAsString значение i, которое было объявлено внутри цикла скриптлета for. Я сделал новый html-документ и сузил его, когда я добавляю код с помощью iAsString, он перестает работать.
Это фрагмент из него:
<body>
<? var data = getData(); ?>
<? var html_data = getHTMLData(); ?>
<div id='scoreboard'></div>
<script>
const scoreboard = document.getElementById("scoreboard");
let html = "<p>My new scoreboard.</p>";
scoreboard.insertAdjacentHTML("beforeend", html);
window.onload = function() {
<? for (var i = 0; i <= +data[0][0]; i++) { ?>
var iAsString = <? i.toString() ?>;
var newRound = '<div id = "round_'+iAsString+'"></div>';
scoreboard.insertAdjacentHTML("beforeend", newRound);
const round = document.getElementById("round_"+iAsString);
<? for (var j = 0; j <= 200; j++) { ?>
round.innerHTML += <? html_data[j][i+1] ?>;
<? } ?>
<? } ?>
}
Пробовал брать <? i.toString() ?> в кавычки '<? i.toString() ?>', не получается.
Обновлять: Основной код в моем файле main.gs
function doGet() {
return HtmlService.createTemplateFromFile('reprex').evaluate();
}
Где reprex.html — html-файл
Я переделал код, чтобы включить только код, который не работает.
<!DOCTYPE html>
<html>
<head>
<base target = "_top">
</head>
<body>
<div id='scoreboard'></div>
<script>
const scoreboard = document.getElementById("scoreboard");
window.onload = function() {
<? for (var i = 0; i <= 2; i++) { ?>
var iAsString = <? i.toString() ?>;
var newRound = '<div id = "round_'+iAsString+'"></div>';
scoreboard.insertAdjacentHTML("beforeend", newRound);
<? } ?>
}
</script>
</body>
</html>
Когда код развернут, и я открываю проверку скрипта https://script.google.com/macros/s/AKfycbwtyD0rP5tJlRzsS8S8nkHEJmi6_NS0mv_p_5tMiHag4sHD1nZn_-sddtBx3WLI5z_ngg/exec внутри div под названием scoreboard нет разделов
Но когда я изменяю код внутри insertAdjacentHTML() случайным кодом, он работает
<!DOCTYPE html>
<html>
<head>
<base target = "_top">
</head>
<body>
<div id='scoreboard'></div>
<script>
const scoreboard = document.getElementById("scoreboard");
window.onload = function() {
<? for (var i = 0; i <= 2; i++) { ?>
scoreboard.insertAdjacentHTML("beforeend", "<p>this works</p>");
<? } ?>
}
</script>
</body>
</html>
Когда вы открываете его для проверки после его развертывания, https://script.google.com/macros/s/AKfycby5A3CV_ejIQmXyS-m5IBagfM_OKlwRPtVvQouyvUBBhLWBsmZH2evYGlGsiXIpNysKWg/exec код появляется внутри блока таблицы результатов.
Любая помощь будет оценена по достоинству!
Извините, я новичок в этом, я добавил воспроизводимый пример вместе с фотографиями проблемы
Попробуйте это вместо этого.
<html>
<head>
<base target = "_top">
</head>
<body>
<div id='scoreboard'></div>
<script>
const scoreboard = document.getElementById("scoreboard");
window.onload = function() {
<? for (var i = 0; i <= 2; i++) { ?>
var newRound = "round_"+<?= i ?>;
newRound = '<div id = "'+newRound+'"><p>'+newRound+'</p></div>';
scoreboard.insertAdjacentHTML("beforeend", newRound);
<? } ?>
}
</script>
</body>
</html>
Вы могли бы сделать так же легко, прежде чем страница будет обслуживаться и избежать загрузки.
<html>
<head>
<base target = "_top">
</head>
<body>
<div id='scoreboard'>
<? for (var i = 0; i <= 2; i++) { ?>
<div id = "round_"+<?= i ?>>
<p>round_<?= i ?></p>
</div>
<? } ?>
</div>
</body>
</html>
ДАСССС!!!!! СПАСИБО БОЛЬШОЕ!!!!!! ЭТО РАБОТАЕТ!!!!!!!!!! Я не знал, что вы можете использовать <?= вот так!
Пожалуйста, добавьте минимальный воспроизводимый пример (вы должны включить код, который вызывает и оценивает HtmlService.HtmlTemplate). P.S. при добавлении тегов к вопросу просмотрите отрывок тега scriptlet для вопросов о другом типе скриптлетов.