我不确定这个问题是否特定于Backbone.js。我有一个具有以下渲染功能的模型:
render: function() {
var self = this;
this.$el.empty();
this.model.fetch({
success: function() {
self.$el.append(self.template(self.model.attributes));
}
});
return this;
}
如您所见,在success
回调函数中,我使用了一个名为self
的变量。这是因为在回调中,当我希望将this
设置为视图时,window
设置为this
。有没有办法保留{{1}}的原始引用而不将其存储在另一个变量中?
答案 0 :(得分:6)
使用Function.prototype.bind函数将对象绑定到函数中的this
变量。
render: function() {
this.$el.empty();
var successFunc = function() {
this.$el.append(this.template(this.model.attributes));
};
this.model.fetch({
success: successFunc.bind(this)
}
});
return this;
}
答案 1 :(得分:6)
有没有办法可以保留原始引用,而不将其存储在另一个变量中?
是的,这是proxy
method
this.model.fetch({
success: $.proxy(function() {
this.$el.append(this.template(this.model.attributes));
}, this)
});
或者,您可以使用下划线的bind
方法:
this.model.fetch({
success: _.bind(function() {
this.$el.append(this.template(this.model.attributes));
}, this)
});