Вопрос по jquery, javascript – Как вставить модель в коллекцию backbone.js с определенным индексом?

17

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

Что я пробовал до сих пор:

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

<code>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});
</code>

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

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

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

Ваш Ответ

3   ответа
3

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

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

Error: User Rate Limit Exceeded Dine
Error: User Rate Limit Exceeded
9

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 функция определена в коллекции страниц?

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

Error: User Rate Limit Exceeded Dine
55

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

Pass {at: index} to splice the model into the collection at the specified index.

Пример:

Pages.add({ foo: bar }, { at: Pages.length - 2 })
Error: User Rate Limit Exceeded Dine
Error: User Rate Limit Exceeded Dine

Похожие вопросы