2017-02-28 23 views
2

当我使用Binding.scala,我想根据源数据someCollection创造一些div S:当我使用Binding.scala时,出现错误“每个指令都必须位于SDE块内”,我该如何解决这个问题?

val someCollection = Seq("foo", "bar") 
someCollection.map { item => 
    <div>{item.bind}</div> 
} 

但是,我得到一个编译器错误each instructions must be inside a SDE block

我该如何解决这个问题?

+0

我需要某人帮助为这个问题创建一个'binding.scala'标签。请参阅https://github.com/ThoughtWorksInc/Binding.scala/issues/47 –

回答

3

导致此错误的代码是您的bind表达式不得超出@dom宏的范围。

  1. 在封闭的代码重构到它自己的@dom批注的方法:创建一个封闭,并且可以通过解决时,就会发生这种情况。
  2. 转换someCollectionBindingSeq,例如:

    Constants(someCollection: _*).map { item => <div>{item.bind}</div> }

  3. 提供一个scalaz.Traverse型类的收集(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>