传递回调时如何避免函数换行

时间:2012-10-04 14:51:56

标签: javascript oop backbone.js

我想将一个函数传递给backbone的成功回调,就像这个

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

然而,这将无法工作我最终必须通过整个环境并包装在这样的函数内:

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

为什么我不能这样做?即使我将setup函数绑定到它的父节点,如_.bind( this.setup, this );,它仍然不会使用正确的(它的'父节点)。但只有它'没有包裹在一个功能......

2 个答案:

答案 0 :(得分:2)

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

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

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

或使用_.bindAll修改对象以使用绑定函数:

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

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

    }
});

答案 1 :(得分:-1)

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

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

然而,我不喜欢它太多,因为事件处理程序就是这样,它们处理事件,然后做东西(比如setup()方法),在这种情况下,你可能会在闭包中丢失对象。