Как использовать Scala и HTML-код внутри одного блока

Почему вариант HTML-элемент не связан внутри select в случае 1?

Случай 1: не работает

@base{
  <select name="" value="" class="custom-select">
  @{
    println("1"); // this is printed to console             
    <option value="test">i</option> // this is not shown in html
    println("2"); // this is printed to console                     
  }
  </select>
}

Дело 2: работа

@base{
  <select name="" value="" class="custom-select">
  @{
    println("1"); // this is printed to console             
    <option value="test">i</option> // this is shown in html                    
  }
  </select>
}

Обновить:

Как создать цикл, который связывает все элементы option с шаблоном scala? Следующий код не связывает никакие элементы опции. Что на самом деле возвращает тип? Пустая строка?

<select name="" value="" class="custom-select">
@{
    for(i <- 1 to 10) {
        <option value="@i">@i</option>
    }
}
</select>

2 ответа

Блок кода @{...} является замыканием, которое имеет предполагаемый тип возврата из последнего оператора.

В первом случае тип возвращаемого значения выводится как Unit так как println(...) возвращается Unit

Во втором блоке возвращается HTML.

Я не могу говорить с первым вопросом напрямую, но предполагая, что @korefn и @om-nom-nom верны; что блок является закрытием и интерпретирует возвращение как пустоту.

В ответ на ваше обновление я бы попробовал:

@for(i <- 1 to 10) {
    <option value="@i">@i</option>
}

вот как я использовал это в прошлом. Я также нашел полезным использовать вложенный блок @if, чтобы по-разному обрабатывать выбранную опцию, чтобы она выбиралась при загрузке документа.

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