3

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

4

2 回答 2

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;
}
于 2013-09-04T03:23:42.453 回答
6

有没有办法可以保留原始引用而不将其存储在另一个变量中?

是的,这是该proxy方法的合理用例

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)
});
于 2013-09-04T03:23:51.063 回答