Коллекция backbone.js получить vars
Это кажется очевидным, но я как-то его пропустил...
Как вы отправляете параметры вместе с функцией backbone.js collection fetch()?
Или, с более широкой точки зрения: у меня есть большой набор данных на сервере, сообщения в этом случае, которые я хочу сделать доступными через коллекцию. Увидев, что могут быть тысячи сообщений, я не хочу просто извлекать и хранить их все сразу, поэтому моя коллекция должна будет хотя бы понять ограничения и смещения. Не говоря уже о запросе фильтрованных или отсортированных списков.
Является ли базовая коллекция даже способ справиться с этим?
Приветствия
Ответы
Ответ 1
Я уже несколько дней возился с Backbone, и мне пришлось решить эту проблему почти сразу, и я посмотрел на это решение, но я нашел его неуклюжим. После прочтения еще одной базовой документации я обнаружил, что вы действительно можете переопределить любые jQuery.ajax параметры в методе fetch(). Так, например,
Posts = Backbone.Collections.extend({
model: Post,
url: '/posts'
});
Теперь, когда вы хотите вызвать fetch, просто отправьте все параметры, которые вы хотите. например.
var posts = new Posts();
posts.fetch({ data: { page: 3, pagesize: 10, sort: 'asc' } });
Это приведет к следующему запросу:
http://yourdomain/posts?page=3&pagesize=10&sort=asc
В любом случае, я знаю, что вы уже приняли ответ, но, надеюсь, это поможет кому-то.
Ответ 2
Рассмотрим этот код, когда при создании экземпляра вашей коллекции вы передаете предпочтения для ее смещения, ограничения или сортировки. Инициализация принимает значения по умолчанию, если настройки не предусмотрены. И тогда функция url добавляет их в вызов на сервер. После этого вам придется обновлять эти значения (возможно, только смещение), при обработке ответов с сервера.
MessageList = Backbone.Collection.extend({
initialize: function(models, options) {
options || (options = {});
this.offset = options.offset || 0;
this.limit = options.limit || MessageList.DEFAULT_LIMIT;
this.sortBy = options.sortBy || MessageList.DEFAULT_SORTBY;
},
url: function() {
return '/messages?' +
'offset=' + encodeURIComponent(this.offset) + '&' +
'limit=' + encodeURIComponent(this.limit) + '&' +
'sort_by=' + encodeURIComponent(this.sortBy);
},
parse: function(response) {
// Parse models
// Parse offset, limit, sort by, etc
}
}, {
DEFAULT_LIMIT: 100,
DEFAULT_SORTBY: 'name_asc'
});
Ответ 3
Вы можете добавить идентификатор к URL-адресу, который может использоваться сервером для выбора отправки данных. Например.
var EventsCollection = Backbone.Collection.extend({
model: Events,
});
var eventCollection = new EventsCollection();
eventsCollection.url = 'foo?offset=10&limit=20';
eventsCollection.fetch();
Ответ 4
Отмените функцию "url" вашей коллекции и добавьте параметры (? param = xyz).
Параметр параметров выборки также можно использовать, так как он передается последнему вызову jQuery ajax. Поэтому, если вы добавите параметр "data" там, он будет использоваться.