Backbone model.fetch()回调(调用setTimeout)中的作用域问题
Scope issue within Backbone model.fetch() callback (calling setTimeout)
我有一个主视图(Services)与子视图(Service)的集合。每个子视图需要每5秒刷新一次。要做到这一点,我有以下[extract]:
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);
}});
}
如何实现连续(不重叠)更新功能。或者-我如何将视图的范围应用于fetch
回调中的this
?
我只是在复习这个老问题,为了将来的参考,我现在遵循这个模式,因为我在这里找到了_.bind
OTT:
update: function() {
var self = this;
this.model.fetch({ success: function() {
setTimeout(self.update, 5000);
}});
}
其中一个选项是使用下划线_.bind
函数:
update: function() {
this.model.fetch({ success: _.bind(function() {
setTimeout(this.update, 5000);
}, this)});
}
我知道这是一个老问题,但是成功和失败事件返回三个值:模型、响应和选项。您可以调用model.update
,而不是在success函数中调用this.update
:
update: function() {
this.model.fetch({ success: function( model, response, options) {
setTimeout(model.update, 5000);
}});
}
相关文章:
- 使setInterval和setTimeout工作时出现问题
- setTimeout调用自身的任何问题
- 通过抛出setTimeout()来处理JavaScript异常的任何问题
- setTimeout范围问题
- Javascript初学者:setTimeout隐藏/显示问题
- 对jQuery使用setTimeout()是否有任何问题;媒体查询“;类型情况
- javascript 中的 setTimeout 问题
- 使用 setTimeout 在画布中制作动画时出现问题
- Jquery 鼠标悬停与 setTimeout() 和淡入/淡出问题
- Javascript 中使用 setTimeout 的作用域问题
- 正在清除setTimeout问题
- 不理解这个setTimeout是如何/为什么修复我的IE8问题的
- 奇怪的setTimeout问题
- IE8 中的 setTimeOut 和无响应脚本出现问题
- Javascript setTimeout函数问题
- Chrome setTimeout() 计时问题
- JavaScript setTimeout内存问题
- Javascript setTimeout参数问题(I'm使用匿名函数版本)
- setTimeout传递参数问题
- Javascript setTimeout问题w/ for循环