2012-07-20 71 views
0

我试图在获取集合后调用渲染。Backbone.js在收集完成后调用渲染

在我的初始化方法,我有:

this.collection.bind('all', this.render, this); 
this.collection.fetch(); 

在IE似乎有时它试图渲染,收集资料之前。集合似乎没有可以绑定的“更改”事件,是否有更好的方法来确保集合在渲染之前被提取?

谢谢!

编辑:

如果我刷新页面,它似乎总是工作,但是如果我在地址栏再次点击和页面加载,它不会永远工作。

+0

重置事件是你在找什么? – nikoshr 2012-07-20 18:50:14

+0

嗯,看起来并不像它,所以我先从一个空集合开始,然后使用fetch()来填充它。之后,我想调用渲染 – dzm 2012-07-20 18:57:37

+0

上面添加了一个额外的注释,它仅在您从地址栏直接转到时才隔离,如果我刷新页面 - 它可以工作。 – dzm 2012-07-20 19:08:11

回答

2

如果你想保证数据已被提取的渲染之前,那么我建议使用jQuery的deferred对象:

this.collection.deferred = this.collection.fetch(); 
self = this; 
this.collection.deferred.done(function() { 
    self.collection.render(); 
    } 
); 

基本上什么你把函数发送到done才会被调用取回完成后就完成了。

更多deferreds:

+0

+1 Awesome。谢谢 – Trip 2012-07-22 17:41:34

0

下面应该工作:

this.collection.on('reset', this.render); 
this.collection.fetch(); 

通常在Backbone.js的人会使用上()绑定一个回调一个东西。

0

下肯定应该工作,它的工作对我来说...

,而不是下面

this.collection.fetch(); 

使用

this.collection.fetch(async: false);