Для Loop over Backbone Collection
Довольно новый для позвоночника, так что это действительно основной вопрос. У меня есть коллекция Backbone, переданная в функцию, и я могу доказать, что она была передана и что модели в коллекции имеют идентификаторы.
Вот как я устанавливаю идентификаторы -
convertToMapObjects: (results) =>
objectList = new ObjectList()
results.each(result)->
testObj = new TestObject()
testObj.set
id = result.get("id")
objectList.add(testObj)
И в другой функции (доступ через создание триггера модели события) -
getIds: (objects) =>
ids = (object.id for object in objects)
Я думаю, что проблема может быть из-за того, как я повторяюсь в коллекции, потому что, когда я пытался делать
for object in objects
console.log(object)
Я видел два не определенных. Это верно? Если да, почему я не могу использовать цикл for для прохождения через базовую коллекцию? Кроме того, есть ли способ сделать это?
Ответы
Ответ 1
A Backbone collection не является массивом, поэтому for ... in
не приведет к ожидаемым результатам. Вы хотите посмотреть свойство коллекции models
, если хотите использовать простой цикл.
Однако в коллекциях Backbone есть различные методы Underscore, смешанные в:
Подчеркнутые методы (28)
Магистральные прокси-серверы для Underscore.js, чтобы обеспечить 28 итерационных функций на Backbone.Collection. Они не все документированы здесь, но вы можете ознакомиться с документацией Underscore для получения полной информации...
Таким образом, вы можете использовать map
или pluck
, если хотите избежать доступа свойство models
:
ids = objects.map (m) -> m.id
ids = objects.pluck 'id'
Метод pluck
является более или менее конкретным случаем map
, но коллекции реализуют собственную версию, а не используют версию Underscore, чтобы они могли вырезать атрибуты модели, а не простые свойства объекта.
Ответ 2
Вы хотите перебрать свойство models
коллекции, а не сам объект коллекции.
Ответ 3
for object in object.models
Это даст вам модель в коллекции