如何在单个块中使用scala和html代码

时间:2013-03-26 06:26:18

标签: html scala playframework playframework-2.0 scala-template

为什么选项html元素在case 1中的select中没有绑定?

案例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>
}

更新

如何创建一个将所有选项元素绑定到scala模板的循环?以下代码不绑定任何选项元素。什么是实际的返回类型?空行?

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

2 个答案:

答案 0 :(得分:2)

代码块@{...}是一个闭包,它具有来自最后一个语句的推断返回类型。

在第一种情况下,返回类型推断为Unit,因为println(...)返回Unit

在第二个块中返回html。

答案 1 :(得分:0)

我不能直接谈第一个问题,但假设@korefn和@ om-nom-nom是正确的;该块是一个闭包,并将该回报解释为无效。

为了回应您的更新,我会尝试:

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

这就是我过去使用它的方式。我还发现使用嵌套的@if块以不同方式处理所选选项很有帮助,以便在加载文档时选择它。