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。これは、コールバック内で、ビューに設定したいときにに設定されているためですthiswindow元の参照を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 に答える