当我使用Binding.scala时,我得到了一个错误“每个指令必须在SDE块中”,我如何修复这个错误?

当我使用Binding.scala时,我得到了一个错误“每个指令必须在SDE块中”,我如何修复这个错误?,scala,dom,data-binding,web-frontend,binding.scala,Scala,Dom,Data Binding,Web Frontend,Binding.scala,当我使用Binding.scala时,我想根据源数据创建一些divssomeCollection: val someCollection = Seq("foo", "bar") someCollection.map { item => <div>{item.bind}</div> } val someCollection=Seq(“foo”、“bar”) someCollection.map{item=> {item.bind} } 但是,我得到了一个编译器

当我使用Binding.scala时,我想根据源数据创建一些
div
s
someCollection

val someCollection = Seq("foo", "bar")
someCollection.map { item =>
  <div>{item.bind}</div>
}
val someCollection=Seq(“foo”、“bar”)
someCollection.map{item=>
{item.bind}
}
但是,我得到了一个编译器错误
,每个指令都必须在SDE块中


如何修复此问题?

导致此错误的代码是,
bind
表达式不能超出
@dom
宏的范围。创建闭包时可能会发生这种情况,可以通过以下方式解决:

  • 将闭包中的代码重构为自己的
    @dom
    注释方法
  • someCollection
    转换为
    BindingSeq
    ,例如:

    Constants(someCollection:*).map{item=>{item.bind}

  • 为集合()提供一个
    scalaz.Traverse
    type类

  • TL;博士

    @dom def renderList(数据:List[Binding[String]])={
    导入scalaz.std.list.\键入列表的类
    
    对于(b),我需要有人帮助创建此问题的
    binding.scala
    标记。请参阅
    @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>