2013-10-04 6 views
7

मैं नेटवर्क कनेक्शन के साथ-साथ स्थानीय स्टोरेज से डेटा लाने के लिए संग्रह में लेआउट विधि को ओवरराइड करना चाहता हूं, जब नेटवर्क कनेक्शन नहीं होता है।रीढ़ की हड्डी में fetch विधि ओवरराइड

यह एक एक संग्रह

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

मैं यहाँ

a.The सफलता है और न ही त्रुटि समारोह 2 समस्याओं का सामना कर रहा हूँ अंदर समारोह लाने है निष्पादित

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

ख दिया नहीं कर रहे हैं। यदि कोई कनेक्शन नहीं है तो संग्रह को डेटा कैसे सेट करें ताकि मैं इसे सफलतापूर्वक

उत्तर

3

पसंद करते हैं शोध करने के बाद मैं समस्या एक के लिए इस सवाल का जवाब मिल गया है ।

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

विकल्प तर्क गुजर समारोह और तर्क लाने के लिए fetch.apply को हम बुला समारोह से सफलता समारोह का उपयोग करने के

4

इस तरह कुछ करने का प्रयास कर सकूं। $ .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.'); 
}); 
1

यह सबसे अधिक उपयुक्त हो सकता है रीढ़ की समन्वयन ओवरराइड करने के लिए सक्षम हो जाएगा के बाद() विधि बचत और संपादन को कवर करने के लिए भी। आप स्थानीय 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]);   
} 

मैं इस बाहर की कोशिश नहीं की है, लेकिन उम्मीद है कि आपको अंदाजा हो। अपने मॉडल और संग्रह पर स्थानीय स्टोरेज संपत्ति को परिभाषित करना न भूलें।

संबंधित मुद्दे