2017-02-28 9 views
2

, 나는 소스 데이터 someCollection에 따라 일부 div의를 만들려면 :Binding.scala를 사용할 때`각 명령어는 SDE 블록 안에 있어야합니다. '라는 오류가 있는데 어떻게 해결할 수 있습니까? 내가 Binding.scala를 사용하는 경우

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 매크로의 범위를 벗어나면 안됩니다. 자신의 @dom 주석 방법에 폐쇄의 코드를 리팩토링

  1. : 클로저를 만들고 해결할 수 있습니다 때 발생할 수 있습니다.
  2. 예컨대 BindingSeqsomeCollection 변환 :

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

  3. 은 (Run this example on ScalaFiddle)

TL 수집하는 scalaz.Traverse 타입 클래스를 제공한다;

@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> 
DR