2012-03-17 17 views
27
yılında, çalışmıyor

scala şablonunda Benim kod:maç vaka play2

@session.get("user.id") match { 
    case Some(_) => "xx" 
    case _ => "yy" 
} 
<a href="">Logout</a> 

Ama oluşturulan html sayfasına doğrudan görüntülenebilir case ...:

match { case Some(_) => "xx" case _ => "yy" } Logout 

Ve yılında

""" 
<body> 
"""),_display_(Seq(/*11.4*/session/*11.11*/.get("user.id"))),format.raw/*11.26*/(""" match """),format.raw("""{"""),format.raw/*11.34*/(""" 
    case Some(_) => "xx" 
    case _ => "yy" 
"""),format.raw("""}"""),format.raw/*14.4*/(""" 
<a href="">Logout</a> 
""" 

Amadesteklemelidir, doc gördüğünüz: .template.scala oluşturulan, bu kadar 0:

@defining(session.get("user.id")) { x => 
    @x match { 
     case Some(_) => { "xx" } 
     case None => {"yy"} 
    } 
} 

Ama bu kadar karmaşık görünüyor: https://github.com/playframework/Play20/wiki/ScalaTemplates

@connected match { 

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

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

} 

UPDATE1

Son olarak, çalışmanın bir yolunu buldular.

@{session.get("user.id") match { 
    case Some(_) => "xx" 
    case _ => "yy" 
}} 

Ama karmaşık durumda iyi çalışmıyor: Update2

başka basit bir çözüm bulun

@{session.get("user.id") match { 
    case Some(_) => {<a href="@routes.Users.logout">Logout</a>} 
    case _ => "yy" 
}} 

@routes.Users.logout dönüştürülür edilmeyecektir.

Update3

Bu getOrElse çözümdür:

@session.get("user.id").map { _ => 
    <a href="@routes.Users.logout">Logout</a> 
}.getOrElse { 
    Not logged 
} 

O inşaat ama ben aynı sorunu vururkenbir match case

+0

Durumların doğru bölümünü parantez içine alırsanız ne olur? Örneğin.'case Bazı (_) => {" xx "}' –

+0

Teşekkürler, ama bu işe yaramıyor – Freewind

cevap

47

kullanmaz. Davanın sağ tarafını küme parantezinde kapatmak benim için sorunu çözdü.

Bu benim için çalışıyor: parantez olmadan

@user match { 
    case Some(user) => { Welcome, @user.username! } 
    case None => { <a href="@routes.Application.login">Login</a> } 
} 

, bu maç satırında {vurgulanan sonra boşluk bir hata verdi. "'case' beklenen ancak tanımlayıcı bulundu."

 <div class="col-md-9"> 
     @{ 
      articles collect { 
      case (title,time,shortcontent) => { 
      Html(s""" 
       <div class="blog-post"> 
        <h2 class="blog-post-title"> $title </h2> 
        <p class="blog-post-meta"> $time </p> 
        <p> $shortcontent </p> 
        <hr/> 
       </div> 
      """) 
      } 
     } 
     } 
    </div> 

fikri şudur: Ben çözmek için bir yol buldu

//This gives me the same error 
@user match { 
    case Some(user) => @{ "Welcome, " + user.username + "!" } 
    case None => { <a href="@routes.Application.login">Login</a> } 
} 
+0

Not: boşlukların süslü kullanımları ve \ n kodu biçimlendirmek de \ benzer bir sorunla karşılaştığımda aynı hatayı tetikleyebilir @users { case Bazı (kullanıcılar) => {\ n @for (\ n kullanıcı <- kullanıcılar \ n) {\ n \ @ user.name \ n} \ n} case Yok => {No users} } – ilmirons

0

: Böyle açılış küme ayracı önce @ koymak çalışırsanız ben de bana bu hata veriyor

Bir dize döndürün ve sonra dönüştürmek için bir Html yöntemi kullanın.