बैकबोन मॉडल में कैश/मेमोराइज़र कैसे बनाएं

मान लीजिए कि मेरे पास एक दृश्य है जो model.fetch() और फिर सर्वर से अनुरोध कर सकता है।

मैं लागू करना चाहता हूं:
1) एक चेकर परिणाम याद करने में सक्षम
2) परिणाम को रीफ्रेश करें (सर्वर को अनुरोध करना) केवल तभी जब सर्वर का अंतिम अनुरोध दस मिनट से अधिक पुराना हो।

मुझे क्या करना चाहिए?
क्या ऐसा करने के लिए कोड का एक टुकड़ा पहले से ही है?

define([], function() {

    var MyModel = Backbone.Model.extend({

    url: function() {
        return "http://localhost/restapi/model/";
    },

    fetch() {
        if(diffTime > 10minutes) {
           //make request to the server
        }
        else {
           //return memo
        }
    }    

    });

});
0
जोड़ा संपादित
विचारों: 1
@ParthThakkar बिल्कुल नहीं, अगर दृश्य मॉडल को रीफ्रेश करने से 10 मिनट से अधिक पुराना मॉडल। फ़ेच() बना देता है।
जोड़ा लेखक underscore666, स्रोत
@ParthThakkar सर्वर के लिए एक ही अंतिम अनुरोध के लिए पुराना सम्मान
जोड़ा लेखक underscore666, स्रोत
आपका मतलब है, हर दस मिनट, एक नया अनुरोध किया जाना चाहिए?
जोड़ा लेखक Parth Thakkar, स्रोत
10 मिनट से अधिक पुराना? क्या सम्मान के साथ पुराना? पिछला <�कोड> fetch() । यह सब थोड़ा उलझन में है, क्या आप इसे स्पष्ट करने के लिए सिर्फ सवाल संपादित कर सकते हैं?
जोड़ा लेखक Parth Thakkar, स्रोत

3 उत्तर

आपको Backbone.sync विधि को ओवरराइड करने की आवश्यकता है http://documentcloud.github.com/backbone/#Sync

यह कोड स्थानीय स्टोरेज को कैश को लागू करने के लिए सहेजता है http: //documentcloud.github .com/रीढ़ की हड्डी/docs/रीढ़-localstorage.html

यदि डेटा 10 मिनट से बड़ा हो तो सर्वर से लाने के लिए "पढ़ने" मामले में कुछ तर्क जोड़ने के लिए काफी सरल है।

0
जोड़ा
अच्छा, मुझे लगता है कि इस तरह मुझे कोड की केवल दो पंक्तियां जोड़नी चाहिए ... उदाहरण होना अच्छा लगेगा।
जोड़ा लेखक underscore666, स्रोत

कोडमनीकी ने कहा, स्थानीय भंडारण एक अच्छा विकल्प होगा। लेकिन यदि आप इसके लिए लाइब्रेरी का उपयोग नहीं करना चाहते हैं, तो आप इस क्लास का उपयोग उन मॉडलों को बढ़ाने के लिए कर सकते हैं जिन्हें कैश कार्यक्षमता की आवश्यकता होती है।

var CachedModel = Backbone.Model.extend({

    lastFetch: null,   //millisec.
    cache: { }
    fetch: function() {
        if(!this.lastFetch || (lastFetch - Date.now() > 10*60*1000) {
           //make request to the server
        }
        else {
           //return this.cache
        }
    }    

});
0
जोड़ा

मुझे वास्तव में अच्छी तरह से काम करने के लिए https://github.com/Ask11/backbone.offline मिली है मुझे।

एकमात्र उपाध्यक्ष यह है कि यह स्थानीय स्टोरेज का उपयोग करता है, आप amplify.store http://amplifyjs.com/api/store/

0
जोड़ा