0

我想像这样将一个函数传递给主干的成功回调

this.model.fetch({
    success: this.setup
});

但是,这行不通,我最终不得不传递整个环境并包装在这样的函数中:

var that = this;
this.model.fetch({
    success: function(){
        that.setup();
    }
});

为什么我不能这样做?即使我像这样将 setup 函数绑定到它的父级_.bind( this.setup, this );,它仍然不会使用正确的 this (它的父级)。但前提是它没有包含在函数中......

4

2 回答 2

2

_.bind返回绑定到对象的函数,它不会修改原始函数(基本上它会创建您编写的包装函数)。

但是,您可以将此绑定函数作为回调传递

this.model.fetch({
    success: _.bind(this.setup, this);
});

或使用_.bindAllwhich 确实修改对象以使用绑定函数:

var V = Backbone.View.extend({
    initialize: function() {
        _.bindAll(this, "setup");

        this.model.fetch({
            success: this.setup
        });
    },
    setup: function() {

    }
});
于 2012-10-04T15:12:07.090 回答
-1

它不起作用,因为“this”是您定义的对象({成功:this.setup})试试这个:

var that = this;
this.model.fetch({
      success: that.setup
    }
});

however, i dont like it too much, since event handlers are just that, they handle events, and then do stuff (like setup() method) also, in this case, you may lost object in the closure.

于 2012-10-04T15:12:39.760 回答