2017-02-28 28 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>