Comment faire un cache/memorizer dans BackboneModel

Supposons que j'ai une vue qui peut faire model.fetch() et ensuite une demande au serveur.

Je voudrais mettre en œuvre:
1) Un vérificateur capable de mémoriser le résultat
2) rafraîchir le résultat (faire la requête au serveur) seulement si la dernière requête au serveur est antérieure à dix minutes.

Que dois-je faire?
Y a-t-il déjà un morceau de code pour le faire?

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
@ParthThakkar pas exactement, Si la vue fait un model.fetch() plus de 10 minutes que d'actualiser le modèle.
ajouté l'auteur underscore666, source
@ParthThakkar Plus ancien respect de la même dernière requête au serveur
ajouté l'auteur underscore666, source
vous voulez dire, toutes les dix minutes, une nouvelle demande devrait être faite?
ajouté l'auteur Parth Thakkar, source
plus de 10 minutes? plus âgé en ce qui concerne quoi? le précédent fetch() . C'est un peu confus, pouvez-vous simplement modifier la question pour la rendre plus claire?
ajouté l'auteur Parth Thakkar, source

3 Réponses

Vous devez remplacer la méthode Backbone.sync http://documentcloud.github.com/backbone/#Sync .

Ce code sauvegarde le stockage local pour implémenter un cache http: //documentcloud.github .com/backbone/docs/backbone-localstorage.html .

Il est assez simple d'ajouter une certaine logique dans le cas "read" pour aller chercher sur le serveur si les données datent de plus de 10 minutes.

0
ajouté
Sympa, je suppose que de cette façon je devrais ajouter juste deux lignes de code ... ce sera sympa d'avoir un exemple.
ajouté l'auteur underscore666, source

Comme codemonkey a dit, localstorage serait une bonne option. Mais si vous ne voulez pas utiliser une bibliothèque pour cela, vous pouvez utiliser cette classe pour étendre les modèles qui nécessitent la fonctionnalité de cache.

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
ajouté

J'ai trouvé https://github.com/Ask11/backbone.offline pour travailler très bien pour moi.

Le seul vice est qu'il utilise localStorage, vous pouvez aussi opter pour plus de support en allant réécrire des morceaux à utiliser avec amplify.store http://amplifyjs.com/api/store/ .

0
ajouté