2013-04-27 9 views
5

別のテンプレートのテンプレートから再利用可能なブロックを使いたいと思います。どうやってやるの?具体的に:私はlogo_headerを含めたい他のテンプレートビュー/エラー/ notFound.scala.htmlを持ってテンプレートから再利用可能なブロックを別のテンプレートに組み込む

私はテンプレートビュー/ main.scala.html

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

このタグを含むていますタグをメインテンプレートから削除します。私は(main.logo_header @、またはmain.logo_header @てみてください)が、コンパイルは常に言う:

値logo_headerは私が見てきた

views.html.mainオブジェクトのメンバではありません公式documentationどこに含まれているか説明していますが、なぜ動作しないのか理解できません。

答えて

5

ドキュメントに記載されている使用方法とは少し異なることがあります。ドキュメンテーションでは、再利用可能なタグはそれ自身のファイルで宣言されています。あなたがしようとしているのは、あるビューテンプレートでヘルパー関数を宣言し、別のテンプレートから呼び出すことです。 this answerで説明したように、関数は宣言されたビューテンプレートにのみ表示されます。次のように

ビュー/ _logo_header.scala.html

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

そして、それを参照:

あなたがする必要がどのような

は、独自のファイルに出て、あなたのロゴヘッダーマークアップを移動しています

件/ main.scala.html

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

新しいファイルに先頭のアンダースコアが付いた名前を付けました。これは、完全なHTMLドキュメントではなく、HTMLスニペットを含むファイルとしてマークする一般的な命名規則です。

最後に、あなたのロゴヘッダースニペットが引数を取る必要はないと仮定しました。それがない場合は文書で述べたように、あなたは、いくつかのScalaで振りかけることができます。

ビュー/ _logo_header.scala.html

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

ビュー/ main.scala.html

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

基本的に、テンプレート用に再利用可能なhtmlコンポーネント(ヘッダー、フッター、ロゴ)が必要なときは、それぞれに独自のテンプレートを作成する必要がありますか? – Behnil

+0

@Behnil - はい、私が知る限り。 – avik

+0

ありがとう@avik。私は最後の質問が1つあります。ビュー/タグフォルダは何となく特別ですか?あるいは、彼らはドキュメントでそれを選ぶだけですか? – Behnil

関連する問題