Me gustaría poner en práctica una especie de gestor de cobros en su 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];
}
}
})();
Aquí el gerente es responsable de instanciar colecciones y obtenerlos. Cuando llamas:
var exampleCollection = manager.getCollection('example');
obtienes una instancia de colección de ejemplo con datos que ya se han obtenido. Siempre que necesite esta colección nuevamente, puede volver a llamar al método. A continuación, obtendrá la misma instancia exacta sin necesidad de buscarla nuevamente.
Este es solo un ejemplo de administrador muy simple, y hay muchas características adicionales que puede implementar y mejorar.
Recomiendo encarecidamente no manejar este problema en un nivel inferior (por ejemplo, la capa de transporte de $ .ajax). Si lo hace, evitaría que su colección se busque varias veces, pero terminará teniendo instancias de modelos diferentes con la misma ID flotando alrededor de su aplicación. Cada instancia de colección crearía sus propios modelos.
En un CouchApp en el que actualmente estoy trabajando, también me pareció necesario evitar instancias de modelos duplicados en diferentes colecciones (diferentes vistas de bases de datos pueden devolver los mismos datos del modelo). Esto se ha solucionado teniendo una colección separada en el administrador, que realiza un seguimiento de todos los modelos que ya están cargados en la aplicación.
Por último, pero no menos importante, podría considerar implementar un método de actualización en sus colecciones o el administrador que se encargará de actualizar la colección del servidor. Si hace esto con el método fetch, toda su colección se restablece para que todos los modelos se destruyan y luego se vuelvan a crear. Esto es malo si tiene modelos de esta colección a los que se hace referencia en otro lugar de la aplicación (como suele hacer). Esas instancias están desactualizadas y duplicadas en su aplicación. El método de actualización comprueba si las instancias con la identificación entrante ya están presentes en la colección actual. Si es así, se actualizan, de lo contrario se agregan.
Bounty is ON! ¡Buscando obtener más opiniones sobre este tema! – Industrial
¿Desea mantener su colección almacenada en la memoria caché en el navegador utilizando localStorage o simplemente asegúrese de que la colección sea singleton y siempre que lo necesite, llame a la misma instancia que ya se haya obtenido? –