我对骨干很新,我正在尝试构建一个简单的应用程序。这就是我到目前为止所拥有的
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,
...
},
答案 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()
它将在更改时自动更新