admin管理员组文章数量:1402919
I'm not sure if this question is specific to Backbone.js. I have a model with the following render function:
render: function() {
var self = this;
this.$el.empty();
this.model.fetch({
success: function() {
self.$el.append(self.template(self.model.attributes));
}
});
return this;
}
As you can see, inside the success
callback function, I use a variable called self
. This is because inside the callback, this
is set to window
when I want it to be set to the view. Is there a way I can retain the original reference of this
without storing it in another variable?
I'm not sure if this question is specific to Backbone.js. I have a model with the following render function:
render: function() {
var self = this;
this.$el.empty();
this.model.fetch({
success: function() {
self.$el.append(self.template(self.model.attributes));
}
});
return this;
}
As you can see, inside the success
callback function, I use a variable called self
. This is because inside the callback, this
is set to window
when I want it to be set to the view. Is there a way I can retain the original reference of this
without storing it in another variable?
- For small callbacks without inner callbacks you can use function.prototype.bind (or similar alternatives) but for larger chunks of code I remend sticking with "self" or "that" because these lexically scoped variables continue to work even for nested callbacks. – hugomg Commented Sep 4, 2013 at 3:28
2 Answers
Reset to default 6Is there a way I can retain the original reference of this without storing it in another variable?
Yes, this is a reasonable use case for the proxy
method
this.model.fetch({
success: $.proxy(function() {
this.$el.append(this.template(this.model.attributes));
}, this)
});
Alternatively you can use underscore's bind
method:
this.model.fetch({
success: _.bind(function() {
this.$el.append(this.template(this.model.attributes));
}, this)
});
Use the Function.prototype.bind function to bind your object to the this
variable within a function.
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;
}
本文标签: javascriptRetaining quotthisquot inside callback functionStack Overflow
版权声明:本文标题:javascript - Retaining "this" inside callback function - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1744303955a2599720.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论