从回调函数中调用其他函数时,“对象没有方法”

时间:2014-01-03 19:58:40

标签: javascript backbone.js

我正在使用骨干网,我正在尝试设置如下的回调:

app.myView = Backbone.View.extend({

     events : {
        'click #myButton' : 'onClick',
        },

    onClick : function(e) {
        var self = this;
        myModel.save(null, {
            success : self.successAction
        });
        return false;
    },

    successAction : function() {
        this.myOtherFunction();
    },

    myOtherFunction : function() {
        this.$el.hide();
    }

}); 

这是我得到的错误:

TypeError: Object [object global] has no method 'myOtherFunction' 

如何从回调函数中调用同一个类的另一个函数?

另外,我想问一下,通常可以使用回调函数传递参数吗? 像这样:

myModel.save({
    "success" : successAction(param1, param2)
});

successAction : function(param1, param2) {
    this.myOtherFunction();
}

1 个答案:

答案 0 :(得分:6)

当调用函数successAction时,它从全局范围调用,因此上下文指向回调内的全局对象,您可以使用function.bind(对旧版浏览器使用shim支持) ),试试:

onClick : function(e) {
    var self = this;
    myModel.save({
        "success" : self.successAction.bind(self)
    });
    return false;
},

并传递可以使用的参数:

myModel.save({
    "success" :  self.successAction.bind(self, param1, param2)
});