В вашем случае я бы реализовал своего рода менеджер коллекций:
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];
}
}
})();
Здесь менеджер отвечает за создание экземпляров коллекций и их выборку.Когда вы звоните:
var exampleCollection = manager.getCollection('example');
, вы получаете экземпляр коллекции примеров с уже загруженными данными.Всякий раз, когда вам понадобится эта коллекция снова, вы можете вызвать метод снова.Затем вы получите точно такой же экземпляр без необходимости извлекать его снова.
Это просто очень простой пример менеджера, и есть множество дополнительных функций, которые вы можете реализовать и улучшить.
Я бы настоятельно рекомендовал не решать эту проблему на более низком уровне (например, на транспортном уровне $ .ajax).Если вы сделаете это, вы предотвратите многократное получение вашей коллекции, но в итоге у вас будут разные экземпляры модели с одинаковым идентификатором, плавающим вокруг вашего приложения.Каждый экземпляр коллекции будет создавать свои собственные модели.
В CouchApp, над которым я сейчас работаю, я также счел необходимым предотвратить дублирование экземпляров модели в разных коллекциях (разные представления БД могут возвращать одни и те же данные модели).Это было решено с помощью отдельной коллекции в диспетчере, который отслеживает все модели, уже загруженные в приложение.
И последнее, но не менее важное: вы можете рассмотреть возможность применения метода обновления в своих коллекциях или менеджера, который будетобрабатывать обновление коллекции с сервера.Если вы сделаете это методом fetch, вся ваша коллекция будет сброшена, поэтому все модели будут уничтожены, а затем воссозданы.Это плохо, если у вас есть модели из этой коллекции, на которые есть ссылки в другом месте приложения (как вы это обычно делаете).Эти экземпляры устарели и дублируются в вашем приложении.Метод refresh проверяет, есть ли экземпляры с входящим идентификатором в коллекции curent.Если это так, они обновляются, в противном случае они добавляются.