我有一个主视图(服务),其中包含一组子视图(服务)。每个子视图需要每5秒刷新一次。为此,我有以下[摘录]:
Service: Backbone.View.extend({
...
initialize: function () {
this.model.bind('change', this.render, this);
_.bindAll(this, 'update');
},
render: function () {
...
this.update();
return this;
},
update: function() {
this.model.fetch();
setTimeout(this.update, 5000);
}
...
setTimeout
对update()
的调用当然与this
一样正确绑定到相关视图。
当我将setTimeout移动到fetch
的回调中时会出现问题,因为this
现在指向全局范围:
update: function() {
this.model.fetch({ success: function() {
// this is now global
setTimeout(this.update, 5000);
}});
}
如何实现连续(非重叠)更新功能。或者 - 如何将视图的范围应用于this
回调中的fetch
?
刚刚回答这个旧问题,为了将来参考,我现在遵循这种模式,因为我在这里找到_.bind
OTT:
update: function() {
var self = this;
this.model.fetch({ success: function() {
setTimeout(self.update, 5000);
}});
}
答案 0 :(得分:21)
其中一个选项是使用下划线_.bind
功能:
update: function() {
this.model.fetch({ success: _.bind(function() {
setTimeout(this.update, 5000);
}, this)});
}
答案 1 :(得分:6)
我知道这是一个老问题,但成功和失败事件会返回三个值:模型,响应和选项。您可以拨打this.update
:
model.update
update: function() {
this.model.fetch({ success: function( model, response, options) {
setTimeout(model.update, 5000);
}});
}