12

백본에 처음 이니 정말 근본적인 질문입니다. 함수에 전달 된 백본 컬렉션을 가지고 있으며이 컬렉션이 통과되었고 컬렉션의 모델에 ID가 있음을 증명할 수 있습니다. For Loop Over Backbone Collection

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) 

내가 문제가 있기 때문에 될 수 있습니다 생각 여기

내가 ID를 설정하고있어 방법 내가 시도 할 때이

for object in objects 
    console.log(object) 

을하고 있기 때문에 컬렉션을 반복하고있어 어떻게 두 undefi을 보았다 네드. 이 올바른지? 그렇다면 백본 컬렉션을 통과하는 for 루프를 사용할 수없는 이유는 무엇입니까? 또한 내가 할 수있는 방법이 있습니까?

답변

20

백본 컬렉션이 배열이 아니므로 for ... in은 예상 한 결과를 얻지 못합니다. 간단한 루프를 사용하려면 컬렉션의 models 속성을보고 싶습니다.

그러나 백본 모음 various Underscore methods mixed in있다 : Underscore.js에

밑줄 방법 (28)

백본 프록시 Backbone.Collection 28 개 반복 기능을 제공한다. ...

  • 대해 forEach (각)
  • ...

그래서 당신이 할 수있는을 그들은 모두 여기에 문서화되어 있지 않습니다,하지만 당신은 자세한 사항은 밑줄 문서에서 좀 걸릴 수 있습니다

ids = objects.map (m) -> m.id 
ids = objects.pluck 'id' 

: 당신이 models property에 접근하지 않도록하려는 경우 map 또는 pluck를 사용메서드는 다소 다르지만 map의 특별한 경우이지만 컬렉션은 단순 개체 속성이 아닌 모델 특성을 뽑을 수 있도록 Underscore 버전을 사용하는 대신 네이티브 버전을 구현합니다.

+0

컬렉션에 당신에게 모델을 제공합니다 - 감사합니다 – praks5432

5

컬렉션 개체 models property (컬렉션 개체 자체가 아닌)을 반복하고 싶습니다.

4
for object in object.models 

이이 정확하게 내 질문에 대답