1

MarionetteJS を使用して CompositeView でメタ情報をロードするという予期しない動作が発生しています。サーバー側からの JSON は次のようになります。

{
    "メタ": {
        「合計」: 2
    }、
    "映画": [
        {
            "カテゴリ": "アクション",
            "description": "別の話が続きます....",
            "ID": 1,
            "星": "4.0",
            "title": "私のテストムービー"
        }、
        {
            "カテゴリ": "アクション",
            "説明": "話は続きます....",
            "ID": 2,
            "星": null,
            "title": "私の2番目の映画"
        }
    ]
}

Backbone コレクションを使用して、次のようなメタ情報を設定します。

MA.Collections.Movies = Backbone.Collection.extend({
  URL: '/api/movies.json',
  解析: 関数 (データ) {
    this.meta = 新しい MA.Models.MetaMovie(data.meta);
    data.movi​​es を返します。
  }
});

MA.addInitializer(関数() {
  MA.Collections.Movies.model = MA.Models.Movie;
}))

しかし、CompositeView からこのメタ変数にアクセスしようとすると、コレクションは適切に初期化されますが、メタ情報は失われているようです。このメタ情報を CompositeView のモデルに提供する方法はありますか?

PS コンソール出力は次のようになります。

複合ビュー出力

4

1 に答える 1

1

fetch からのコールバックをセットアップし、それを使用して meta.total の値を直接 metaMovie モデル インスタンスに設定します。

movie.js:

MA.addInitializer(function(){
  var self = this;
  var metaMovie = new MA.Models.MetaMovie({total: 1});

  MA.collections.movies = new MA.Collections.Movies();
  MA.composites.movies = new MA.Views.Composites.Movies({
    itemView: MA.Views.Items.Movie,
    model: metaMovie,
    collection: MA.collections.movies
  });
  var p = MA.collections.movies.fetch();

  // see http://api.jquery.com/jQuery.ajax/ for details
  p.done(function(data) {
    self.metaMovie.set({total: data.total});
  });
});
于 2013-04-22T16:56:28.037 に答える