3

質問

Web サイトの各ページに表示されるウィジェット (データベース呼び出しの結果) を実装するにはどうすればよいですか?

環境

サイドバーのある従来の Web アプリケーションがあります。サイドバーには、次のようなデータが含まれています。

  • ユーザー名、
  • アカウントに関する詳細(前回の接続など)
  • ユーザーのプロファイルに基づいてパーソナライズされたメッセージ。
  • データベースから抽出されたその他のデータ。

これまでのソリューション

公式ドキュメントに示されているように、テンプレート内でテンプレートをレンダリングすることが可能です。これは興味深い機能ですが、十分ではありません。データベースからのデータをウィジェットでレンダリングする必要があるためです。

それは次のことを意味します:

  1. サイドバーに必要なすべてのデータをどこかで取得し、
  2. そのデータを各コントローラーから各ビューに渡し、
  3. 最後に、各テンプレートで、指定されたデータを使用して外部テンプレートを呼び出します。

私がやりたいことは、Symfony2 フレームワークに存在するものです。コントローラーを直接呼び出せるようにしたいと思います。

{% render MyController:MyActionMethod %}

この種のメカニズムをどのように実装できますか?

PS : はい、ちょっと調べてみました。この質問「同様の質問」が見つかりました: play2 のどこにでもパラメータを渡さないようにするには?

4

2 に答える 2

1

最初に説明した2つの解決策があります-コントローラーからデータをある種のオブジェクトとして渡し、それをtagsレンダリングするために使用します。

2 番目の解決策は逆です。Play 2各テンプレートは単なる Scala 関数であるため、必要なデータを取得してサブテンプレートをレンダリングするメソッドをコントローラーで呼び出すこともできます。

すなわち。controllers.MyController.myMethod(Integer a, Integer b)テンプレート使用からアクセスする

<div>
  @MyController.myMethod(1,2) 
</div>
于 2012-07-12T09:53:46.273 に答える
0

Result の代わりに play.api.templates.Html (または play.mvc.Content) を返す静的メソッドをコントローラに記述できます。

public static Content widget() {

   Data fetchedData = fetchDataFromTheDatabase();

   return views.html.widget.render(fetchedData);
}

ビューでは、この静的メソッドを呼び出すだけです。

于 2012-07-12T09:55:35.593 に答える