Подтвердить что ты не робот

Для 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 для прохождения через базовую коллекцию? Кроме того, есть ли способ сделать это?

4b9b3361

Ответ 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, чтобы они могли вырезать атрибуты модели, а не простые свойства объекта.

Ответ 3

for object in object.models

Это даст вам модель в коллекции