メニューなど、複数のページに共通のUIが必要な場合は、これを行うための推奨方法は何ですか?Play Frameworkは「スニペット」をサポートしていますか?
テンプレートコードとバックエンドコントローラの両方が含まれます(LiftWebフレームワークの「スニペット」に似ています)。
私はPlay用のメニューモジュールがあることを知っていますが、これは一般的にどのように達成されるかにもっと関心があります。
メニューなど、複数のページに共通のUIが必要な場合は、これを行うための推奨方法は何ですか?Play Frameworkは「スニペット」をサポートしていますか?
テンプレートコードとバックエンドコントローラの両方が含まれます(LiftWebフレームワークの「スニペット」に似ています)。
私はPlay用のメニューモジュールがあることを知っていますが、これは一般的にどのように達成されるかにもっと関心があります。
一般的なビューコードを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(メニューと例で選択)に入れた値は、ちょうど同じように利用できるようになります。
ありがとうございます。renderArgsを使用するサンプルコードを教えてください。 – sanity
コードサンプルが追加されました。 – Codemwnci
@Codemwnci私はrenderArgs {}内で空の値またはヌル値を取得しています。正常にログインすると、私はrenderArgsにマップを格納し、renderArgs.get(login_det ')。toString()を使用してコンソールにすべての値を出力しました。別のコントローラで同じものを使用すると、{}のようにrenderArgsを取得しています。ここで問題になる可能性があります。 – Arasu