骨干返回长度为0

时间:2013-02-21 22:15:25

标签: javascript backbone.js

我对骨干很新,我正在尝试构建一个简单的应用程序。这就是我到目前为止所拥有的

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,
        ...
    },

2 个答案:

答案 0 :(得分:4)

fetch执行异步HTTP(Ajax)请求,因此您应该通过fetch成功回调:

collection.fetch({
   success: function(){
       console.log(collection.length);
   }
});

答案 1 :(得分:0)

扩大CD的答案,

更好的方法是调用fetch,然后使用listenTo在更改时调用render方法

初始化方法中的

执行此操作

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

如果您愿意,可以在外面取文

collection.fetch()

它将在更改时自动更新