7

Según la Play 2.0 documentation, la coincidencia de patrones puede realizarse en una plantilla, así:patrones sobre object.member de Juego 2.0 plantillas

@connected match { 

    case models.Admin(name) => { 
    <span class="admin">Connected as admin (@name)</span> 
    } 

    case models.User(name) => { 
    <span>Connected as @name</span> 
    } 
} 

El texto entre los paréntesis después de las expresiones caso se trata como de salida (por ejemplo, HTML), y esto es bastante conveniente.

Sin embargo, al intentar utilizar una expresión de coincidencia que no es una variable simple, como object.member, así:

@album.year match { 
    case Some(y: Int) => { @y } 
    case None => { <b>nope</b> } 
} 

da lugar a un error de compilación: "')' expected but 'case' found."

Uso defining a obligar a la expresión a una variable simple, así:

@defining(album.year) { foo => 
    @foo match { 
     case Some(y: Int) => { @y } 
     case None => { <b>nope</b> } 
     } 
    } 

obras, pero parece un poco cumb ersome.

¿Existe alguna manera adecuada de utilizar esta función de coincidencia de patrones en las expresiones que involucran un objeto y un miembro (por ejemplo, album.year)?

+0

hace @ (partido album.year { Algunos casos (a: Int) => {} @y caso Ninguno => {nop}} ) o @ (album.year) coinciden { caso de que alguno (a: Int) => {@ y} caso Ninguno => {no} } trabajo? – axaluss

+0

No, ninguno de estos funciona. Los primeros resultados en "inicio esperado de la definición", y el segundo da como resultado el mismo error "')' esperado ... '' como el anterior. – kes

+0

does @ {album.year match {case Some (y: Int) => {@y} case None => {nope}}} work? – axaluss

Respuesta

0

¿Has intentado solo hacer esto?

@album.year.getOrElse("<b>None</b>"); 

No estoy seguro de si es así de simple, pero debería funcionar. Ver https://github.com/playframework/Play20/blob/master/samples/scala/computer-database/app/views/list.scala.html#L64

+0

Sé que es una posible forma alternativa de resolver el ejemplo simple que aparece en mi pregunta ... sin embargo, ese ejemplo fue solo para demostrar el problema, es decir, la coincidencia de patrones en Play no funciona del todo o no funciona como se esperaba. – kes

2

¿Has probado esto?

@album.year match { 

    case Some(y: Int) => { 
    @y 
    } 
    case None => { 
    <b>nope</b> 
    } 
} 

Vea aquí un ejemplo: https://github.com/bjartek/computer-database-mongo/blob/matchtest/app/views/list.scala.html#L67

Parece que los espacios en blanco es muy importante para hacerlo bien cuando se hace esto en la plantilla

+0

OK, acabo de probarlo con el espacio en blanco ajustado. Todavía no funciona.La diferencia entre tu ejemplo y el mío es que tu expresión de coincidencia es un identificador simple (@company) y el mío es @ object.member. – kes

Cuestiones relacionadas