0

ビューでコレクションをループすると、空のように見え、アラートダイアログが表示されません。このビューでconsole.log(this.collection)を使用すると、問題ないように見えます(このコレクションの16要素)。

私のルーター:(コレクションのURL:'/ api / employees'、これはrails jsonの出力です)

Office.Routers.Employees = Backbone.Router.extend({

  routes: {
    "":   "index"
  },


  initialize: function() {
    this.collection = new Office.Collections.Employees();
    this.collection.fetch();
  },

  index: function() {
    var view = new Office.Views.EmployeesIndex({ collection: this.collection });
    view.render();
  }

});

と私のindex.jsビュー:

Office.Views.EmployeesIndex = Backbone.View.extend({

  render: function() {
    this.collection.each( function( obj ){ alert(obj); } );
  }

});

編集:

これは、ビュー内のconsole.log(this.collection)の出力です:http://i.stack.imgur.com/ZQBUD.png

Edit2:

Railsが有罪だと思います。静的コレクションを使用すると、すべてが正常に機能します

var collection = new Backbone.Collection([
  {name: "Tim", age: 5},
  {name: "Ida", age: 26},
  {name: "Rob", age: 55}
]);
4

2 に答える 2

1

collection.fetch()サーバーに非同期要求を行います。インデックスコールバックは、フェッチが戻るのを待ちません。したがって、レンダリング関数は空のコレクションをレンダリングしています。

fetchメソッドのsuccessコールバックを使用する必要があります。

index: function() {
  this.collection.fetch({
    success: function(data) {
      var view = new Office.Views.EmployeesIndex({ collection: data });
      view.render();        
    }        
  });
}

バックボーンのドキュメントでは、ドキュメント自体にデータを含めることで、必要な初期データをブートストラップすることを推奨していることに注意してください。

アプリを最初に読み込むときは、ページをレンダリングするために、必要になることがわかっている初期モデルのセットを用意するのが一般的です。それらをフェッチするために追加のAJAXリクエストを起動する代わりに、より良いパターンは、それらのデータをすでにページにブートストラップすることです。

于 2012-07-23T11:56:15.733 に答える
0

ビューがレンダリングされるまでに、フェッチが完了していない可能性があります。次のことを試してください。

  index: function() {
    var p, collection, view;
    collection = new Office.Collections.Employees();
    p = collection.fetch();
    view = new Office.Views.EmployeesIndex({ collection: collection });
    p.done(view.render);
  }
于 2012-07-23T09:02:13.110 に答える