2017-06-24 3 views
0

ich folgendes Modell haben:Wie wird die Mustererkennung in Binding.scala verwendet?

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

Specs ein Zug ist und die folgenden konkreten Typen:

trait Specs { 

    def name: String 

} 

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

In meiner Scala.js app, ich will jetzt eine Tabelle und eine Liste aller erstellen die Einträge:

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

Allerdings bekomme ich folgende Fehlermeldung:

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

Was mache ich falsch?

Antwort

3

Dies:

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

ist kein gültiger Ausdruck, so dass Sie es nicht wörtlich in der XML-Interpolation. Wenn Sie in beiden Zweigen vollständige XML-Ausdrücke hatten, sollte es funktionieren. Also die einfachste Lösung, die ich sehen kann, ist zu ziehen <small> innen:

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