Как вставить модель в коллекцию backbone.js в определенном индексе? - программирование
Подтвердить что ты не робот

Как вставить модель в коллекцию backbone.js в определенном индексе?

Мне нужно вставить модель в коллекцию в позиции Collection.length-2. Последняя модель в коллекции всегда должна оставаться последней моделью в коллекции.

То, что я пробовал до сих пор:

Я добавил одну "страницу" в коллекцию "Страницы", а затем попытался поменять их, изменив их последовательность:

var insertedpage = Pages.at(Pages.length-1);
var lastpage = Pages.at(Pages.length-2);
insertedpage.set({sequence: Pages.length-1});
lastpage.set({sequence: Pages.length});

Я также попытался удалить последнюю страницу, а затем добавить новую страницу, а затем добавить последнюю страницу.

var lastpage =  Pages.pop();
Pages.add({example1: example2});
Pages.push(lastpage);

ни одна из них не работала. Недавно добавленная страница по-прежнему отображается как последняя модель в коллекции. Нужно ли мне после этого называть какую-то функцию порядка?

4b9b3361

Ответ 1

Извините за короткий ответ (не успевайте ответить), но посмотрите на определение функции компаратора.

http://backbonejs.org/#Collection-comparator

Ответ 2

Backbone.Collection.add() принимает объект options, который поддерживает ключ at для указания индекса.

Pass {at: index}, чтобы объединить модель в коллекцию с указанным index.

Пример:

Pages.add({ foo: bar }, { at: Pages.length - 2 })

Ответ 3

По тому же предложению, что и Роб Хруска, используйте Backbone.Collection.add() с at в объекте options.

Pages = new Backbone.Collection([
  {id:1, foo:'bar'},
  {id:2, foo:'barista'}  /* Last model should remain last */
]);

/* Insert new "page" not at the end (default) but length minus 1 */
Pages.add({id:3, foo:'bartender'}, { at: Pages.length - 1 });

Pages.at(0).id === 1; // true
Pages.at(Pages.length - 2).id === 3; // true
Pages.at(Pages.length - 1).id === 2; // true

Вы упомянули, что Pages похоже сортируется по атрибуту sequence; у вас есть функция comparator, определенная в коллекции Pages?

Другой вопрос, хотите ли вы обновить этот атрибут sequence для всех существующих моделей страниц, находящихся в настоящее время в коллекции, когда новая страница добавляется во вторую позицию в последнюю позицию? Или был ли этот атрибут попыткой выполнить ваш первоначальный вопрос?