2013-10-04 9 views
7

Modellerde getirme yöntemini geçersiz kılmak ve ağ bağlantısı olmadığında yerel veri kaynağından veri almak için yapılan koleksiyonlarda geçersiz kılmak istiyorum.Omurgada getirme yöntemini geçersiz kılma

Bu burada

a.The başarı ne de hata işlevi 2 sorunlarla karşı karşıya am bir koleksiyon

fetch:function(){ 
    if(online){ 
     return Backbone.Collection.prototype.fetch.call(this) ; 
    }else{ 
    // return Backbone.Collection.fetch event - with data from localstorage 
    } 
} 

içindeki işlevini getirme olduğunu

this.collection.fetch({ 
    success: function(data){ ... }, 
    error: function(){ ... } 
}); 

b idam edilmez. Bağlantı yoksa, veriyi toplamada nasıl ayarlayacağım, böylece başarı fonksiyonuna erişebilmem için

cevap

3

tercih olarak ben sorunun a için cevap bulduk bu yüzden $ .ajax bir söz verir .

fetch:function(options){ 
    if(navigator.onLine){ 
     return Backbone.Collection.prototype.fetch.apply(this, options) ; 
    }else{ 
    return //Trying to findout 
    } 
} 

yöntemiyle) (biz

4

Böyle bir şey deneyin. Aşağıdaki

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(); 
} 

Sonra kullanabileceğiniz yukarıdaki örneği yapmak gerekir yoksa araştırma sonra

this.collection.fetch().then(function() { 
    console.log('Successfully fetched from localstorage or server.'); 
}); 
1

Bu omurga en senkronizasyonu geçersiz kılmak için en mantıklı olabilir çağıran işlevinden başarı işlevine ulaşmak mümkün olacak fetch.apply fonksiyonu ve argümanları almaya seçeneği argüman geçtikten sonra kaydetme ve düzenlemeyi de kapsayacak şekilde.

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]);   
} 

Bunu denemek yoktu, ama umarım fikir: Eğer backbone.localStorage.js tarafından sağlanan yerel depolama kullanıyorsanız, sizin geçersiz kılma bu gibi görünebilir. Modellerinizde ve koleksiyonlarınızda bir localStorage özelliği tanımlamayı unutmayın.