Подтвердить что ты не робот

Коллекция backbone.js получить vars

Это кажется очевидным, но я как-то его пропустил...

Как вы отправляете параметры вместе с функцией backbone.js collection fetch()?

Или, с более широкой точки зрения: у меня есть большой набор данных на сервере, сообщения в этом случае, которые я хочу сделать доступными через коллекцию. Увидев, что могут быть тысячи сообщений, я не хочу просто извлекать и хранить их все сразу, поэтому моя коллекция должна будет хотя бы понять ограничения и смещения. Не говоря уже о запросе фильтрованных или отсортированных списков.

Является ли базовая коллекция даже способ справиться с этим?

Приветствия

4b9b3361

Ответ 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" там, он будет использоваться.