Unterstützt Play Framework "Snippets"?

8

Wenn ich eine gemeinsame Benutzeroberfläche auf mehreren Seiten haben möchte, z. B. ein Menü, was ist die empfohlene Vorgehensweise?

Es würde sowohl den Template-Code als auch einen Back-End-Controller enthalten (ähnlich wie "Snippets" im LiftWeb-Framework).

Mir ist bewusst, dass es ein Menü-Modul für Play gibt, aber ich bin mehr daran interessiert, wie dies im Allgemeinen erreicht werden würde.

    
sanity 25.01.2011, 19:09
quelle

1 Antwort

11

Es gibt zwei Möglichkeiten, allgemeinen Ansichtscode in Play Framework einzubinden.

Sie können das #{include} -Tag oder das #{extends} -Tag verwenden.

Das extends-Tag erstreckt sich, wie der Name schon sagt, von einer übergeordneten Ansicht. Das extends-Tag wird standardmäßig im Skeleton-Code verwendet, der von Play erstellt wird, wenn Sie eine neue Anwendung erstellen. Es erweitert die main.html. Sie fügen Ihren Code hier hinzu.

Mit dem includes-Tag können Sie an einem bestimmten Punkt einen gemeinsamen Code in Ihre Vorlagen einfügen. Das funktioniert in etwa genauso, wie ein php include / require oder jsp includes work.

Das Problem tritt auf, wenn Ihr Vorlagencode auch Daten oder Logik vom Modell (über den Controller) erfordert. Wenn dies der Fall ist, müssen Sie die @Before-oder @With-Notation in Ihrem Controller verwenden, um sicherzustellen, dass der gemeinsame Controllercode jedes Mal ausgeführt wird. Sie können der renderArgs-Liste beliebige Daten hinzufügen, damit sie in der Ansicht verwendet werden können.

Ein einfaches Beispiel für die Verwendung von renderArgs wäre.

%Vor%

Die Werte, die Sie in renderArgs eingegeben haben (Menü und im Beispiel ausgewählt), sind genauso verfügbar, als ob Sie sie an die Rendermethode übergeben hätten.

    
Codemwnci 25.01.2011, 19:33
quelle

Tags und Links