2011-01-25 8 views
8

メニューなど、複数のページに共通のUIが必要な場合は、これを行うための推奨方法は何ですか?Play Frameworkは「スニペット」をサポートしていますか?

テンプレートコードとバックエンドコントローラの両方が含まれます(LiftWebフレームワークの「スニペット」に似ています)。

私はPlay用のメニューモジュールがあることを知っていますが、これは一般的にどのように達成されるかにもっと関心があります。

答えて

11

一般的なビューコードをPlayフレームワークに含めるには2通りの方法があります。

#{include}タグまたは#{extends}タグを使用できます。

名前が示すように、extendsタグは親ビューから拡張されています。 extendsタグは、新しいアプリケーションを作成するときに、Playによって設定されたスケルトンコードでデフォルトで使用されます。 main.htmlを拡張しています。ここにコードを追加します。

includesタグを使用すると、指定したポイントで共通のビューコードをテンプレートに挿入できます。これはPHPのinclude/require、またはjspに作業が含まれていた場合とほとんど同じです。

テンプレートコードでモデルからのデータまたはロジック(コントローラ経由)が必要なときに問題が発生します。このような場合は、コントローラーの@Beforeまたは@With表記を使用して、コントローラーコードの共通部分が毎回実行されるようにする必要があります。任意のデータをrenderArgsリストに追加して、ビュー内で使用できるようにすることができます。

renderArgsを使用する簡単な例は次のとおりです。

@Before 
private static void commonData() { 
    // do your logic here 
    renderArgs.put("menu", menu); 
    renderArgs.put("selected", selectedMenuItem); 
} 

あなたはrenderメソッドにそれらを通過したかのようにあなたがrenderArgs(メニューと例で選択)に入れた値は、ちょうど同じように利用できるようになります。

+0

ありがとうございます。renderArgsを使用するサンプルコードを教えてください。 – sanity

+3

コードサンプルが追加されました。 – Codemwnci

+0

@Codemwnci私はrenderArgs {}内で空の値またはヌル値を取得しています。正常にログインすると、私はrenderArgsにマップを格納し、renderArgs.get(login_det ')。toString()を使用してコンソールにすべての値を出力しました。別のコントローラで同じものを使用すると、{}のようにrenderArgsを取得しています。ここで問題になる可能性があります。 – Arasu

関連する問題