2013-12-12 20 views

Odpowiedz

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

Sądząc po tagach, używasz wersji Play 2.x, ale odwołujesz się do dokumentacji z modułu przeznaczonego dla Play 1.x.

Zakładając, że typy dopasowania, wierzę, czego szukasz, jest coś takiego:

@optionalobject.getOrElse(field) 
+0

To nie działa. Mówi się, że pole nie istnieje. Musi jednak istnieć. Kiedy już wypiszesz klasę case, pokazuje ona wszystkie pola klasy case. –

+0

@ Lilluda5 Edytuj swoje pytanie i pokaż więcej swojego kodu. W jaki sposób deklarujesz 'optionalobject' i' field'? – estmatic

21

Dla nieco ładniejszy formatowania, które może obejmować wiele linii (jeśli trzeba):

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

Lub jeśli nie chcesz wyświetlać niczego, jeśli pole nie jest zdefiniowane:

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

Ten drugi fragment kodu dla _dostępu nic, jeśli pole nie jest zdefiniowane, przypadek użycia jest piękny. Nadal glosuję nad tym, że '' Option'' jest typem kolekcji, pozwalającym robić takie rzeczy. – avik

0

Inną możliwością jest użycie mapę, składnia wolę do mieszania się z HTML

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

Czasami może to być wygodne, aby napisać krótki pomocnika gdy ma do czynienia z Option Declutter kod szablonu:

// 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() 
     } 
    } 

Następnie szablon może korzystać z tej metody pomocniczej bezpośrednio, takiej jak

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