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然后使用listenTo来调用render更改方法

在您的初始化方法中执行此操作

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

如果你愿意,你可以在外面取货

集合.fetch()

它会自动更新更改

于 2013-02-21T22:34:51.307 回答