2013-04-27 3 views
5

Vorrei utilizzare un blocco riutilizzabile da un modello nei miei altri modelli. Come lo posso fare? Più in particolare:Includere i blocchi riutilizzabili da un modello in un altro modello

ho una vista di modello/main.scala.html contenente questo tag

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

un ho altri vista template/errori/notFound.scala.html dove vorrei includere il logo_header tag dal modello principale. Provo @ main.logo_header, o @ main.logo_header(), ma la compilazione dice sempre:

valore logo_header non è membro di oggetto views.html.main

ho guardato nel ufficiale documentation dove descrivono incluso, ma non riesco a capire perché non funzioni.

risposta

5

Hai fatto qualcosa di leggermente diverso dall'uso menzionato nella documentazione. Nella documentazione, il tag riutilizzabile è dichiarato nel proprio file. Quello che stai cercando di fare è dichiarare una funzione di supporto in un modello di vista e quindi provare a chiamarlo da un altro modello. Come menzionato in this answer, una funzione è visibile solo al modello di vista in cui è stata dichiarata.

Quello che dovete fare è spostare il logo header markup fuori nel proprio file:

viste/_logo_header.scala.html

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

quindi fare riferimento a come segue:

visualizzazioni/main.scala.html

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

Ho assegnato al nuovo file un nome con un trattino basso principale poiché si tratta di una convenzione di denominazione comune che contrassegna il file come contenente uno snippet di HTML piuttosto che un documento HTML completo.

Infine, ho assunto che lo snippet di intestazione del logo non debba contenere argomenti. Se è così, si può cospargere in qualche Scala come indicato nella documentazione:

viste/_logo_header.scala.html

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

viste/main.scala.html

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

Quindi, in pratica, quando ho bisogno di componenti html riutilizzabili (intestazioni, piè di pagina, loghi) per i modelli, devo creare il proprio modello per ognuno di essi ?? – Behnil

+0

@Behnil - Sì, per quanto ne so. – avik

+0

Grazie a @avik. Ho un'ultima domanda. La cartella views/tags è in qualche modo speciale? O lo scelgono semplicemente nella documentazione? – Behnil