vorrei implementare una sorta di gestore di collezioni nel tuo caso:
var manager = (function(){
var constructors = {
'example': ExampleCollection
};
var collections = {};
return {
getCollection: function(name) {
if(!collections[name]) {
var collection = new constructors[name]();
collection.fetch();
collections[name] = collection;
}
return collections[name];
}
}
})();
Qui il gestore è responsabile per istanziare collezioni e recupero. Quando si chiama:
var exampleCollection = manager.getCollection('example');
si ottiene un'istanza di raccolta di esempio con dati già recuperati. Ogni volta che hai bisogno di questa raccolta, puoi chiamare di nuovo il metodo. Otterrai quindi la stessa istanza esatta senza bisogno di recuperarla di nuovo.
Questo è solo un esempio di gestore molto semplice e ci sono molte funzionalità aggiuntive che è possibile implementare e migliorare.
Consiglio vivamente di non gestire questo problema a un livello inferiore (ad esempio il livello di trasporto di $ .ajax). Se lo fai, si dovrebbe evitare che la vostra collezione di ottenere recuperati più volte, ma si finisce per avere diverse istanze del modello con lo stesso ID galleggianti intorno la vostra applicazione. Ogni istanza di raccolta creerebbe i propri modelli.
In una CouchApp al momento sto lavorando, ho anche trovato necessario evitare istanze di modello duplicate in raccolte diverse (diverse viste db possono restituire gli stessi dati del modello). Ciò è stato risolto con una raccolta separata nel gestore, che tiene traccia di tutti i modelli già caricati nell'applicazione.
Ultimo ma non meno importante si potrebbe considerare l'implementazione di un metodo di aggiornamento nelle vostre collezioni o il manager che gestirà l'aggiornamento della collezione dal server. Se si esegue questa operazione con il metodo di recupero, l'intera raccolta viene reimpostata, quindi tutti i modelli vengono distrutti e quindi ricreati. Questo è un male se hai modelli di questa collezione a cui fai riferimento da qualche altra parte nell'app (come fai tipicamente). Quelle istanze sono obsolete e duplicate nella tua app allora. Il metodo di aggiornamento controlla se le istanze con l'id in entrata sono già presenti nella collezione curent. Se è così sono aggiornati, altrimenti vengono aggiunti.
La taglia è ON! Cercando di avere più opinioni su questo argomento! – Industrial
Vuoi mantenere la tua raccolta memorizzata nella cache sul browser utilizzando localStorage o semplicemente assicurarti che la raccolta sia un singleton e che ne hai sempre bisogno chiamerà la stessa istanza già recuperata? –