新しいアプリが作成されると、main.htmlとindex.htmlの2つのビューが表示されます。mainが明示的にレンダリングされることはなく、次のように拡張されます。
#{extends 'main.html' /}
別のビュー(index.html)からのみ拡張されている場合、変数をビュー(main.html)に渡すにはどうすればよいですか?
新しいアプリが作成されると、main.htmlとindex.htmlの2つのビューが表示されます。mainが明示的にレンダリングされることはなく、次のように拡張されます。
#{extends 'main.html' /}
別のビュー(index.html)からのみ拡張されている場合、変数をビュー(main.html)に渡すにはどうすればよいですか?
renderメソッドに渡されると、通常どおり使用可能になります。拡張とインクルードを含むビュー全体は、Groovyテンプレートエンジンによってレンダリングされます。
ただし、main.html
通常はすべてのビューで拡張される場合は、次のように、注釈renderArgs
を使用して常にマップに追加するのが最善のオプションです。@Before
これにより、常に利用可能になり、繰り返ししない(DRY)ことが保証されます。
@Before
private void setup() {
renderArgs.put("somekey", "somevalue");
}
このように、レンダリング呼び出しのたびにレンダリングメソッドにキーを渡す必要はありません。
次に、ので、の標準的な方法を使用して簡単にmain.html
アクセスできます。somekey
$somekey
Codemwnciは、コントローラー内からレイアウトテンプレートに変数を渡す方法に関するソリューションを提供します。通常のビューからレイアウトビューに変数を渡す方法は次のとおりです。
index.htmlでは、次のようなことができます。
#{set title:'My title'/}
また、main.htmlでは、index.htmlで設定された変数を「取得」できます。
<h1>#{get 'title'/}</h1>
RythmまたはJapidテンプレートエンジンを使用している場合は、extends
ステートメントで変数をmain.htmlに直接渡すことができます。
Rythmテンプレートエンジンで、main.htmlが次のようになっているとします。
@args String title
...
<h1>@title</h1>
...
次のステートメントを使用して、index.htmlのメインテンプレートを拡張します。
@extends(main, "my title")