4

backbone.js と jersey を実行する Java バックエンドを使用した単一ページの webapp を計画しています。backbone.js のドキュメントで提案されているように、追加の ajax リクエストを防ぐために、初期ロード時にモデル データをページにブートストラップすることに関心があります。

アプリが最初に読み込まれるとき、ページをレンダリングするために、必要になることがわかっている一連の初期モデルを用意するのが一般的です。それらを取得するために追加の AJAX リクエストを発行する代わりに、より適切なパターンは、それらのデータを既にページにブートストラップすることです。

私がしなければならないと思うことの例は、ruby と php のバックボーン パターンに示されていますが、これが Java でどのように機能するかについては、まだ十分に理解できていません。ページが提供される前に、mustache.java などのテンプレート ライブラリを使用してページを前処理する必要がありますか? 誰かがそれがどのように見えるかの例を教えてもらえますか?

ありがとう、マーク

4

4 に答える 4

1

はい、動的データを HTML ページの静的レイアウトと組み合わせるには、何らかの形式のテンプレートが必要です。ただし、単一のページのみを作成する場合は、テンプレート スキーム全体の設定に投資したくない場合があります。代わりに、単純にページを 2 つのセクションに分割し、最初のセクション、JSON 表現、2 番目のセクションを配置して、ホームページを提供することができます。これはちょっと見苦しいですが、この 1 つのケースにテンプレートを追加する価値があるかどうかは、あなた次第です。テンプレートを使用する場合は、mustache を使用するか、Velocity Templates をお勧めします。

Jersey コードを読むと、 Jacksonを明示的に呼び出して、ブートストラップされたモデル オブジェクトを Java から JSON に変換する必要があるようです。

于 2012-05-25T00:48:21.353 に答える
1

私は Jersey に詳しくありませんが、ドキュメントを一瞥すると、主に Restful Web Service フレームワークのようです。@Produces アノテーションを使用して「text/html」のコンテンツ タイプを提供できるようですが、テンプレート システムを使用してビューをレンダリングする明確な方法がわかりません。したがって、SpringPlay Frameworkなどの Java Web フレームワークから始めて、ビュー テンプレート (必要に応じて Mustache) を介してブートストラップされたデータのコレクションを含む初期 HTML を提供するのが適切な場合があります。引き続き Jersey を使用して後続の Ajax/Restful 呼び出しを提供できますが、Spring と Play の両方に Restful の概念も組み込まれています。

于 2012-05-22T05:44:06.250 に答える
1

ソリューションは、テンプレート エンジンによって異なります。この JSP の例を翻訳するには、Moustache.java について十分な知識がありません。JSON シリアル化に Jackson を使用すると、これは JSP タグ ファイルになります。

public class JsonTag extends SimpleTagSupport {

/** the instance to serialize as JSON JSON */
private Object value;

@Override
public void doTag() throws JspException, IOException {
    String json = new ObjectMapper().writeValueAsString(value);
    getJspContext().getOut().print(json);
}

public void setValue(Object value) {
    this.value = value;
}

}

そしてあなたのHTMLページ:

<script>
var router = new App.TabRouter({
    model: new App.MyModel(<k:json value="${it}"/>)
});
</script>

本格的なアプリケーションの場合、毎回新しいインスタンスを作成するのではなく、ObjectMapper インスタンスを再利用する必要があります。

于 2012-05-26T08:45:26.310 に答える
-1

モデル データをブートストラップするには、モデルの JSON をタグにレンダリングするだけで済みます。backbone-pattersリンクからの言い換え:

<script>
  // app data, rendered on server
  var photosJSON = [
    { id: 2, name: "My dog", filename: "IMG_0392.jpg" },
    { id: 3, name: "Our house", filename: "IMG_0393.jpg" },
    { id: 4, name: "My favorite food", filename: "IMG_0394.jpg" },
    { id: 5, name: "His bag", filename: "IMG_0394.jpg" },
  ];
 </script>      
 ...

 <script>
  var Photo = Backbone.Model.extend({
  // photo attributes (from above)
  });

  var PhotoCollection = Backbone.Collection.extend({
     model:Photo
  });

  // build collection model without AJAX call using
  // server rendered JSON above
  var photosCollection = new Photos(photosJSON);
</script>

サーバー上の適切なテクノロジを使用して、JSON データでスクリプトをレンダリングできます。

于 2012-05-22T05:01:32.093 に答える