Вы, вероятно, не хотите просто использовать Collection.fetch()
, потому что вы не получите преимущества кэширования на стороне клиента - он отбросит элементы, которые вы уже загрузили с сервера, и сбросит коллекцию.Вам, вероятно, потребуется расширить Backbone.Collection
пользовательской функцией, чтобы получить больше элементов.Я использовал следующий код в недавнем проекте:
Backbone.Collection.extend({
// fetch list without overwriting existing objects (copied from fetch())
fetchNew: function(options) {
options = options || {};
var collection = this,
success = options.success;
options.success = function(resp, status, xhr) {
_(collection.parse(resp, xhr)).each(function(item) {
if (!collection.get(item.id)) {
collection.add(item, {silent:true});
}
});
if (!options.silent) collection.trigger('reset', collection, options);
if (success) success(collection, resp);
};
return (this.sync || Backbone.sync).call(this, 'read', this, options);
}
});
Он в основном копируется из кода по умолчанию fetch()
, но вместо удаления существующих элементов он добавляет новые.Возможно, вы захотите реализовать что-то на стороне сервера, используя объект options
, так как Julien
предлагает передать параметры того, какие элементы вы хотите загрузить, возможно, либо номер страницы (если вы хотите контролировать размер страницы насервер) или пара старт-стоп (если вы хотите управлять им на клиенте).