在回调函数中保留“this”

时间:2013-09-04 03:20:56

标签: javascript jquery html backbone.js

我不确定这个问题是否特定于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}}的原始引用而不将其存储在另一个变量中?

2 个答案:

答案 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)
});