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

Backgone.js pagination

Я начинаю использовать Backbone и пытаюсь перенести мои шаблоны html backend html в шаблоны javascript.

Одна вещь, я думал, что использование магистрали было бы более выгодным, это ее концепция моделей и коллекций. Так что скажем, у меня есть 100 записей и разбиваю эти записи на 10 на страницу, как правило, без какой-либо работы с javascript, вряд ли можно ожидать кеширования, ajax и одностраничную разбивку на страницы. то есть, скажем, я приземлился на первой странице и теперь нажимаю вторую страницу, вторая страница запрашивает следующие 10 записей ajax'ly, и если я затем перейду на страницу один, я больше не буду запрашивать сервер, потому что он был там,

У меня не было написано кода, но может ли кто-нибудь сказать мне, как я могу добавить ajax для новых данных в существующую коллекцию для разбивки на страницы?

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

var projects_data = <%= @projects.to_json.html_safe %>;
var projects = new Cafe.Collections.ProjectsCollection();
var projects.reset(projects_data);

Теперь мои переменные проекта содержат, скажем, первые 10 записей, а я кто-то отыгрывает еще один раунд из 10, скажем, я сохраняю эти вновь прибывшие 10 в переменной

var projects_data_new = ...

Можно ли добавить их в существующую коллекцию "проектов"?

Или это не шаблон дизайна, который поощряется в Backbone в случае разбивки на страницы?

4b9b3361

Ответ 1

В базовой линии 0,5 и выше при вызове fetch() можно указать, что вы хотите добавить, а не заменить набор данных, присутствующий на клиенте: fetch({add: true}). Это добавит новые объекты в существующую коллекцию projects. Вам все равно придется обрабатывать проблемы с разбивкой по страницам.

Сбор также получает только объекты JSON для добавления/извлечения после того, как они были запущены через Backbone.Collection.parse(), которые вы можете переопределить, чтобы делать такие вещи, как "вместе с проектами", подсчитывать количество объектов на сервере, и возвращать только проекты в add/fetch. " Затем вы можете использовать эти метаданные, чтобы правильно показать, сколько страниц может пропустить страница. Если вы хотите быть очень умным, вы можете использовать эту коллекцию как редкий массив (мой опыт в том, что это нормально для коллекций менее 10 000 элементов на стандартном рабочем столе или ноутбуке, но не в планшете), и пусть пользователь перевернет через страницы произвольно, выборка наполнителя по мере необходимости.

Ответ 2

Надеюсь, что вы решили проблему сейчас:) Как отметил Elf Sternberg, магия заключается в определении вашего синтаксиса Collection(), который далее объясняется ссылкой ниже:

первый удар при разбиении на страницы с помощью backbone.js

Например, как написать синтаксический анализ:

//Предположим, мы отправляем такой объект, как {page: 1, per_page: 3, всего: 233, модели: {...}}

parse: function(resp) {
    this.page = resp.page;
    this.perPage = resp.per_page;
    this.total = resp.total;
    return resp.models;
  }

Как только у вас есть эти данные в вашей коллекции, вам просто нужно подобрать свои взгляды соответственно, и я уверен, что это будет не так сложно, если вы уже достигли этого Far:)