Служба HTML - раскрывающийся список параметров из GSheet

В скрипт Google Apps и службу HTML

Code.gs 
function doGet() {
  return HtmlService.createTemplateFromFile('HTMLUI').evaluate()
  .setSandboxMode(HtmlService.SandboxMode.NATIVE);
}

Вот HTML

HTMLUI.html

<script type="text/javascript"></script>
<script>
<?
  var sheet   = SpreadsheetApp.openById("0Avt7ejriwlxudGZfV2xJUGJZLXktQ2RhQU1uRUgtaXc").getSheetByName("MRF Tab");
  var lastRow = sheet.getLastRow();  
  var myRange = sheet.getRange("C3:C"+lastRow); 
  var data    = myRange.getValues();
?>
</script>
<select>
<? for (var i = 0; i < sourcedata.length; ++i) { ?>
<option><?!= sourcedata[i] ?></option>
<? } ?>
</select>

У меня был этот код в одном из моих проектов (и гораздо больше кода), который в основном собирает информацию с листа и добавляет ее к параметрам (раскрывающемуся списку) в выборе, но при попытке использовать этот же код в новом проекте это не работает, любые идеи что мне не хватает.

В настоящее время отображаемый результат представляет собой раскрывающийся список с <?!=sourcedata[i]?>

Как я могу это исправить. Любая помощь, пожалуйста.

РЕДАКТИРОВАТЬ:---

Пожалуйста, посмотрите @ комментарий № 3 для ссылки на электронную таблицу и некоторые обходные пути с ней...


person Vasim    schedule 28.08.2013    source источник
comment
В настоящее время отображаемый результат представляет собой раскрывающийся список с... чем? Саспенс меня убивает! Последний ряд › 3?   -  person Mogsdad    schedule 28.08.2013
comment
Спасибо, Могсдад... Я думаю, что из-за стрелок и вопросительного знака он не был виден, я изменил код, чтобы сделать их видимыми сейчас... Вставка дополнительной информации, пожалуйста, подождите..   -  person Vasim    schedule 28.08.2013
comment
Хорошо... вот ссылка на электронную таблицу.. есть 2 функции doGet, если я публикую с использованием первого комментария, он работает, однако он не работает со вторым doGet... У меня есть много файлов, которые я разделил и соединил, используя include... помогите, пожалуйста.   -  person Vasim    schedule 28.08.2013


Ответы (1)


Результаты, которые вы описываете, являются результатом вложенных шаблонов HTML. Очевидно, что средство оценки не предназначено для их обработки, поэтому неоцененные скриптлеты отображаются в виде текста.

Вы используете шаблон HTML в test.html для включения шаблона HTML из HTMLUI.html, а функция include() пытается обработать содержимое HTMLUI.html как обычный (не шаблонный) источник HTML.

Один из способов обойти это — использовать версию include() специально для шаблонного html. Поместите это в свой файл gs:

function includeTemplate(filename) {
    return HtmlService.createTemplateFromFile(filename).evaluate()
      .setSandboxMode(HtmlService.SandboxMode.NATIVE)
      .getContent();
}

Затем ваш test.html становится:

<?!= includeTemplate('HTMLUI'); ?>

Это позволит выполнить то, что вы пытаетесь в своем примере. Однако при этом вы теряете некоторые возможности шаблонного html, поскольку у вас не будет возможности передавать переменные в шаблон.

person Mogsdad    schedule 28.08.2013
comment
Спасибо, Могсдад (Устад).... вы молодец... У вас не будет возможности вставлять переменные в шаблон - пожалуйста, объясните, что это значит... Извините, все еще учусь.... - person Vasim; 29.08.2013