在主干中覆盖获取方法
我想覆盖模型以及集合中的获取方法,以便在没有网络连接时从localstorage获取数据。
这是一个集合中的获取函数
fetch:function(){
if(online){
return Backbone.Collection.prototype.fetch.call(this) ;
}else{
// return Backbone.Collection.fetch event - with data from localstorage
}
}
我在这里面临2个问题
a。成功或错误功能未被执行
this.collection.fetch({
success: function(data){ ... },
error: function(){ ... }
});
湾 如果没有连接,如何将数据设置为集合,以便我可以在成功函数中访问它
尝试这样的事情。 $ .ajax返回一个承诺,所以你应该能够做到以下几点
fetch:function(){
var dfd = new jQuery.Deferred();
if(this.online){
return Backbone.Collection.prototype.fetch.call(this) ;
}else{
// Do your logic for localstorage here
dfd.resolve();
}
return dfd.promise();
}
然后你可以使用你的上面的例子或者我喜欢的
this.collection.fetch().then(function() {
console.log('Successfully fetched from localstorage or server.');
});
经过研究,我发现问题的答案是a。
fetch:function(options){
if(navigator.onLine){
return Backbone.Collection.prototype.fetch.apply(this, options) ;
}else{
return //Trying to findout
}
}
在将选项参数传递给函数和参数传递给fetch.apply后,我们将能够从调用函数访问成功函数
重写Backbone的sync()方法以覆盖保存和编辑也许是最有意义的。 如果您使用backbone.localStorage.js提供的本地存储,您的覆盖可能如下所示:
Backbone.sync = function(method, model, options, error) {
if(navigator.onLine){ // Or, however you determine online-ness
return Backbone.ajaxSync.apply(this, [method, model, options, error]);
}
return Backbone.localSync.apply(this, [method, model, options, error]);
}
我没有尝试过,但希望你能明白。 不要忘记在模型和集合上定义localStorage属性。
链接地址: http://www.djcxy.com/p/67079.html