当我使用 Binding.scala 时,出现错误“每条指令必须在 SDE 块内”,我该如何解决这个问题?
When I use Binding.scala, I got the error `each instructions must be inside a SDE block`, how can I fix this?
当我使用Binding.scala时,我想根据源数据someCollection
创建一些div
:
val someCollection = Seq("foo", "bar")
someCollection.map { item =>
<div>{item.bind}</div>
}
但是,我遇到了编译错误 each instructions must be inside a SDE block
。
我该如何解决这个问题?
导致这个错误的代码是你的bind
表达式不能超出@dom
宏的范围。这可能在创建闭包时发生,可以通过以下方式解决:
- 将闭包中的代码重构为它自己的
@dom
注释方法。
将someCollection
转换为BindingSeq
,例如:
Constants(someCollection: _*).map { item => <div>{item.bind}</div> }
- 为集合提供
scalaz.Traverse
类型 class (Run this example on ScalaFiddle)
TL;DR
@dom def renderList(data: List[Binding[String]]) = <ol>{
import scalaz.std.list._ // Type classes for List
for (b <- data) yield {
<li>{b.bind}</li>
}
}</ol>
当我使用Binding.scala时,我想根据源数据someCollection
创建一些div
:
val someCollection = Seq("foo", "bar")
someCollection.map { item =>
<div>{item.bind}</div>
}
但是,我遇到了编译错误 each instructions must be inside a SDE block
。
我该如何解决这个问题?
导致这个错误的代码是你的bind
表达式不能超出@dom
宏的范围。这可能在创建闭包时发生,可以通过以下方式解决:
- 将闭包中的代码重构为它自己的
@dom
注释方法。 将
someCollection
转换为BindingSeq
,例如:Constants(someCollection: _*).map { item => <div>{item.bind}</div> }
- 为集合提供
scalaz.Traverse
类型 class (Run this example on ScalaFiddle)
TL;DR
@dom def renderList(data: List[Binding[String]]) = <ol>{
import scalaz.std.list._ // Type classes for List
for (b <- data) yield {
<li>{b.bind}</li>
}
}</ol>