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 в случае разбивки на страницы?
Ответы
Ответ 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:)