2013-04-27 2 views
5

Ich möchte einen wiederverwendbaren Block aus einer Vorlage in meinen anderen Vorlagen verwenden. Wie kann ich das machen? Genauer gesagt:Einfügen von wiederverwendbaren Blöcken aus einer Vorlage in eine andere Vorlage

Ich habe eine Vorlage views/main.scala.html diesen Tag enthält

@logo_header = { 
    <div id="logo-container"> 
     ... 
    </div> 
} 

ein I andere Vorlage Ansichten haben/errors/notFound.scala.html, wo ich die Logo_Header schließen möchte Tag aus der Hauptvorlage. Ich versuche @ main.logo_header oder @ main.logo_header(), aber die Kompilierung immer sagt:

Wert Logo_Header views.html.main

kein Mitglied des Objekts ist

ich in die ausgesehen haben Offizielle documentation wo beschreiben, einschließlich, aber ich kann nicht verstehen, warum es nicht funktioniert.

Antwort

5

Sie haben etwas anderes getan als in der Dokumentation erwähnt. In der Dokumentation wird das wiederverwendbare Tag in einer eigenen Datei deklariert. Sie versuchen, eine Hilfsfunktion in einer Ansichtsvorlage zu deklarieren und dann von einer anderen Vorlage aus aufzurufen. Wie in this answer erwähnt, ist eine Funktion nur für die Ansichtsvorlage sichtbar, in der sie deklariert wurde.

Was Sie tun müssen, ist Ihr Logo Header Markup ausrücken in eine eigene Datei:

views/_logo_header.scala.html

<div id="logo-container"> 
    ... 
</div> 

es dann auf Verweis wie folgt:

Ansichten/main.scala.html

<html> 
    ... 
    _logo_header 
    ... 
</html> 

Ich habe der neuen Datei einen Namen mit einem führenden Unterstrich gegeben, da dies eine allgemeine Namenskonvention ist, die die Datei so kennzeichnet, dass sie ein HTML-Snippet enthält und nicht ein vollständiges HTML-Dokument.

Schließlich habe ich angenommen, dass Ihr Logo-Header-Snippet keine Argumente aufnehmen muss. Ist dies der Fall, können Sie in einigen Scala streuen wie in der Dokumentation erwähnt:

views/_logo_header.scala.html

@(arg1: String, arg2: String) 
<div id="logo-container"> 
    ... 
</div> 

views/main.scala.html

<html> 
    ... 
    _logo_header("foo", "bar") 
    ... 
</html> 
+0

Also, im Grunde, wenn ich wiederverwendbare HTML-Komponenten (Header, Fußzeilen, Logos) für Vorlagen brauche, muss ich eine eigene Vorlage für jeden von ihnen erstellen ?? – Behnil

+0

@Behnil - Ja, soweit ich weiß. – avik

+0

Danke @avik. Ich habe eine letzte Frage. Ist der Ordner views/tags irgendwie speziell? Oder wählen sie es einfach in der Dokumentation? – Behnil

Verwandte Themen