2013-12-12 16 views
6

Sto provando le cose di riferimento dell'opzione tipo nel modello di riproduzione di Scala. Ho cercato di utilizzare questa risorsa: http://www.playframework.com/modules/scala-0.9/templatesGestione delle opzioni nel modello di riproduzione Scala

Questo è il modo che sto cercando di fare riferimento a un campo nella classe caso:

@{optionalobject ?. field} 

e non funziona, questo è l'errore che sto ottenendo :

';' expected but '.' found. 

Non sono sicuro del motivo per cui viene visualizzato questo errore.

risposta

5
@optionalobject.map(o => o.field).getOrElse("default string if optionalobject is None") 
0

A giudicare dai tag si sta utilizzando una variante Play 2.x, ma si fa riferimento alla documentazione da un modulo pensato per Play 1.x.

Assumendo che il fiammifero tipi, credo che quello che state cercando è qualcosa di simile:

@optionalobject.getOrElse(field) 
+0

Questo non funziona. Sta dicendo che il campo non esiste. Tuttavia, deve esistere. Quando viene emessa la classe case, mostra tutti i campi della classe case. –

+0

@ Lilluda5 Modifica la tua domanda e mostra altro codice. Come stai dichiarando 'optionalobject' e' field'? – estmatic

21

Per la formattazione un po 'più bello che può estendersi su molte linee (se è necessario):

@optionalObject match { 
    case Some(o) => { 
    @o.field 
    } 
    case None => { 
    No field text/html/whatever 
    } 
} 

Oppure, se non si desidera visualizzare qualsiasi cosa se il campo non è definito:

@for(o <- optionalObject) { 
    @o.field 
} 
+1

Questo secondo snippet di codice per _display nulla se il campo non è definito_ use case è adorabile. Continuo a sorvolare sul fatto che "Opzione" è un tipo di raccolta che ti consente di fare cose del genere. – avik

0

Un'altra possibilità è usare la mappa, la sintassi preferisco per la miscelazione con HTML

@pagination.next.map { next => 
    <a href="@Routes.paginated(next)"> 
    @HtmlFormat.escape("Next >>>") 
    </a> 
} 
0

A volte può essere conveniente di scrivere un breve aiuto quando si tratta di Option declutter il codice del modello:

// Helper object is defined in some file Helper.scala 
    object Helper { 
    def maybeAttribute[T](attrName:String, maybeValue:Option[String]) = 
     maybeValue.fold("") { value => 
     Html(attrName + "=" + value).toString() 
     } 
    } 

Quindi il modello può utilizzare questo metodo di supporto direttamente come

// some view.scala.html file 
    <div @Helper.maybeAttribute("id",maybeId)> 
    </div>