1

私はバックボーンにかなり慣れていないので、単純なアプリを構築しようとしています。これは私がこれまでに持っているものです

var Election = Backbone.Model.extend();

var Elections = Backbone.Collection.extend({
   model: Election,
   url: '/assets/data.json',

   initialize: function() {
       console.log('init col');
       this.render();
       return this;
   },

   render: function() {
        console.log('rendering the collection');
        return this;
   },

// return this

});

  var router = Backbone.Router.extend({
   routes: {
       '': 'root'
   },

   root: function(){
       var collection = new Elections();
       collection.fetch();
       console.log(collection.length); //returns 0
   }
});
var r = new router();

Backbone.history.start();

ログはこれ

> init col
> rendering the collection
> 0 

しかし、コンソールで新しいコレクションを手動で作成すると、適切な長さとすべてが表示されます。何らかの理由で、ルーターの呼び出しが早すぎると思いますが、確かではありません。これはサンプルですdata.json

[
    {
        "year": 1868,
        ...
    },
    {
        "year": 1872,
        ...
    },
4

2 に答える 2

4

fetch非同期 HTTP (Ajax) リクエストを実行するためfetch、成功のコールバックを渡す必要があります。

collection.fetch({
   success: function(){
       console.log(collection.length);
   }
});
于 2013-02-21T22:17:23.687 に答える
0

CDの答えを少し拡張すると、

より良いアプローチは、呼び出してから、変更時にメソッドを呼び出すためfetchに使用することですlistenTorender

初期化メソッドでこれを行います

_.bindAll(this, 'render');
this.listenTo(this, 'change', this.render);

必要に応じて外にフェッチすることもできます

collection.fetch()

変更時に自動的に更新されます

于 2013-02-21T22:34:51.307 に答える