在骨干网中调用错误回调

时间:2013-01-16 09:11:13

标签: javascript backbone.js

是否可以简单地触发或调用在骨干网中保存的错误回调?

我用这个

覆盖了骨干的保存功能
save: function(attributes, options) {
            options || (options = {});
            options.timeout    = 10000;    
            options.beforeSend = sendAuthorization;
            console.log( options.connection.ConnectionType );
            if( options.connection.ConnectionType != 'No network connection' ){
                Backbone.Model.prototype.save.call(this, attributes, options);
            }else{
                console.log("ERROR! network related!");
            }
    }

options.connection.ConnectionType是一个简单的字符串,表示设备(iPad)的当前互联网连接。

this.model.save( this.model, 
  connection : { ConnectionType : "No network connection" },
  success    : {...},
  error      : {...}
}

我想要的是if语句失败然后它应该触发save函数的错误回调。可能吗?感谢

1 个答案:

答案 0 :(得分:2)

最简单的是你可以执行error回调函数:

if( options.connection.ConnectionType != 'No network connection' ){
    Backbone.Model.prototype.save.call(this, attributes, options);    
} else {
    if(options.error) {
        options.error(this, null, options);
    }
}

此方法存在的问题是它不符合save方法和error回调API。 save方法应返回jqXHR对象,错误回调应该将其作为第二个参数。

如果要提供API兼容的方法/回调签名,最简单的方法是中止请求。类似的东西:

var xhr = Backbone.Model.prototype.save.call(this, attributes, options);
if( options.connection.ConnectionType == 'No network connection' ){
    xhr.abort();
}
return xhr;

这将在启动后立即取消请求。你得到xhr / promise返回对象和回调的正确xhr参数。 xhr的status为0,statusText“中止”。