2012-02-07 3 views
6

У меня есть базовая коллекция. Я использую fetch({add:true}) для извлечения новых элементов с моего сервера и добавления их в коллекцию.Как я могу получить индекс элемента, добавленного в коллекцию Backbone через выборку?

Я связал функцию слушателя с событием add коллекции. Я хотел бы, чтобы эта функция получила индекс, по которому элемент был добавлен в коллекцию.

Backbone’s documentation for Collection.add говорит: «если вы обратное прослушивание "add" событиечрезвычайной коллекции, options.index покажет вам индекс, при котором модель добавляемый к коллекции.»

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

Как я могу получить индекс, по которому элемент был добавлен в коллекцию?

ответ

8

Всем, кто читает это в будущем, ПРИМЕЧАНИЕ: начиная с версии 0.9.9, options.index больше не установлен. Из журнала изменений:

Чтобы улучшить производительность добавления, options.index больше не будет установлен в обратном вызове события add. collection.indexOf(model) может использоваться для извлечения индекса модели по мере необходимости.

+0

Отличный материал, спасибо за добавление актуального ответа. –

+0

+1 Спасибо за обновление этого. Очень полезно. –

2

Проверьте третий аргумент в вашу функцию связывания, он должен содержать свойство индекса

var c=new Backbone.Collection(); 
c.bind("add",function(model,collection,opts){ 
    console.log(opts); 
}); 

c.add({}); 
c.add({}); 

Edit: Я только что проверил Backbone 0.5.3 и, казалось бы options.index доступна только в версии 0,9

+0

Aha! Да, конечно, я посмотрел на третий аргумент, но я предположил, что это что-то еще, поскольку индекс был установлен на ноль. Я забыл, что я только тестировал добавление элемента в пустую коллекцию, поэтому, очевидно, индекс будет равен нулю. Отлично, ура. –