2017-06-24 4 views
0

私は次のモデルがあります:Binding.scalaでのパターンマッチングの使い方

case class CarBinding(ownerId: Var[String], specs: Var[Option[Specs]]) 

Specsが特色であり、次の具体的な種類があります。私のScala.jsアプリで

trait Specs { 

    def name: String 

} 

case class SportsCarSpecs(name: String, details: Details) extends Specs 

を、私は今、すべてのテーブルやリストを作成したいですエントリ:

@dom 
    def buildTable(): Binding[BindingSeq[Node]] = { 
    val data = Vars.empty[CarBinding] 
    /* Initial population. */ 
    // Some code... 
     <br/> 
     <table class="table table-bordered table-hover"> 
      <thead> 
      <tr> 
       <th class="col-md-1"> 
       <small>Owner ID</small> 
       </th> 
       <th class="col-md-1"> 
       <small>Specs</small> 
       </th> 
      </tr> 
      </thead> 
      <tbody> 
      {for (entry <- data) yield { 
      <tr> 
       <td> 
       <small> 
        {entry.ownerId.bind} 
       </small> 
       </td> 
       <td> 
       <small> 
        {entry.specs.bind match { 
        case Some(SportsCarSpecs(name, details)) => {name} <span>{details.ps}</span> 
        case _ => - 
       }} 
       </small> 
       </td> 
      </tr> 
      }} 
      </tbody> 
     </table> 
     </div> 
    } 

はしかし、私は次のエラーを取得します

';' expected but $XMLSTART$< found. 
[error]     case Some(SportsCarSpecs(name, details)) => {name} <span>{details.ps}</span> 

私は間違っていますか?

答えて

3

この:

entry.specs.bind match { 
    case Some(SportsCarSpecs(name, details)) => {name} <span>{details.ps}</span> 
    case _ => - 
} 

は有効な式ではありませんので、あなたは、XMLリテラルでそれを補間することはできません。両方のブランチで完全なXML式があれば、それはうまくいくはずです。だから私が見ることができる最も簡単な修正は<small>を内部に引き込むことです:

  <td> 
      {entry.specs.bind match { 
       case Some(SportsCarSpecs(name, details)) => <small>{name} <span>{details.ps}</span></small> 
       case _ => <small>-</small> 
      }} 
      </td> 
関連する問題