2012-03-25 2 views
1

Ich würde gerne wissen, ob es eine Art von instanceof Funktionalität in der Vorlagen-Engine des Play (2.0) -Frameworks gibt. Dies würde mir erlauben, die Vererbungsstruktur in meiner Modellschicht effektiv zu verwenden.Gibt es eine "instanceof" -Funktion in der Vorlagen-Engine des Play-Frameworks?

Diese im Grunde, was ich (außer, dass diese Vorlage nicht kompiliert) möchte:

@(instance: Superclass) 

@main { 
    @if(instance instanceof Subclass) { 
     Subclass instanceOfSubclass = (Subclass) instance;  
    } 
} 

Edit: Ich meine in bestimmten Spielen für Java.

Antwort

4

Scala-Mustervergleich verwenden.

@(instance: Superclass) 

@main { 
    @instance match { 
    case foo: Foo => { 
     <a href="@routes.Foo.index()">@foo.title</a> 
    } 
    case bar: Bar => { 
     <a href="@routes.Bar.index()">@bar.title</a> 
    } 
    } 
} 
+1

Das macht den Trick! Vielen Dank! – Christophe

+1

Es ist merkwürdig für mich, dass es in der Java-Welt funktioniert, weil 'Foo' und' Bar' Extraktor (nicht anwenden) zum Mustervergleich haben müssen. Ich bin jetzt neugierig, dass das den Trick macht. Irgendeine Ahnung? –

+1

Ich weiß es nicht genau. Auf der einen Seite überprüft diese Musterübereinstimmung nur den Typ. Auf der anderen Seite macht Play immer noch eine Bytecode-Magie in Java. Ansonsten würden die Scala-Vorlagen in einem Framework, das eine API für Java und Scala bietet, wenig Sinn ergeben. –

Verwandte Themen