Как использовать 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, чтобы по-разному обрабатывать выбранную опцию, чтобы она выбиралась при загрузке документа.