将“this”传递给Backbone的bootbox回调

时间:2013-07-17 14:24:08

标签: javascript backbone.js bootbox

我正在使用Backbone和bootbox。 这是我在视图中的代码:

    confirm : function(result) {
        if (result === true) { 
            var that = this;
            this.model.set({completed: '1'}); // Exception here
            this.model.save(
                    null, {
                success: function (model, response) {
                    Backbone.history.navigate("index", true);
                },
                error: function(model, response) {
                    that.model.set({completed: '0'});
                    var responseObj = $.parseJSON(response.responseText);
                    bootbox.alert(responseObj.message);
                }
            });
        }
    },

    completeProcess : function(event) {
        event.preventDefault();
        this.model.set({completed: '1'});
        bootbox.confirm("Confirm?", this.confirm );
    }

我收到了这个错误:

  

未捕获的TypeError:无法调用未定义的方法'set'

有没有办法从视图传递引用?

2 个答案:

答案 0 :(得分:3)

由于的依赖关系,您可以使用其_.bind功能:

_.bind(function, object, [*arguments])
  

将一个函数绑定到一个对象,这意味着只要该函数是   叫,这个的价值就是对象   可选,通过   预填充函数的参数,也称为partial   应用

在你的情况下,这可能是这样的:

completeProcess : function(event) {
  event.preventDefault();
  this.model.set({completed: '1'});
  bootbox.confirm("Confirm?", _.bind(this.confirm, this));
}

答案 1 :(得分:0)

或者,你可以做这样的事情来坚持原作'这个':

var _this = this;

bootbox.confirm({
    message: Message ,
    callback: function(result) {
        console.log(this + " != " + _this);
    },