0

여기에는 Backbone.js 모델 - 연락처 및 컬렉션 - 연락처가 모델 인 연락처가 있습니다. 필자는 컬렉션에서 모든 연락처를 나열하고 두 번째 모델에서 직접 단일 연락처를 표시하는 두 가지보기를 보았습니다. 그러나 모델을 직접 사용할 때 'change'이벤트를 콜렉션과 함께 사용하는 동안 'change'이벤트를 발생시킬 수 있습니다 (모델의 '모든'이벤트)조차 발생하지 않습니다. 컬렉션과 함께 작동하도록 여기에 추가 바인딩이 누락 되었습니까?Backbone.js : 콜렉션 내에서 모델 이벤트가 실행되지 않습니다.

var Contact = Backbone.Model.extend({ 
    defaults: { 
     id: 0, 
     urlDisplayPicBig: '', 
     urlDisplayPicSmall: '' 
    }, 
    initialize: function() { 
     this.bind('change', this.doSomething); 
    }, 
    generateUrls: function() { //earlier doSomething() 
     ... 
    } 
    ... 
}); 

var Contacts = Backbone.Collection.extend({ 
    model: Contact, 
    ... 
}); 

업데이트 내가 generateUrls을 실행해야 모두 수집 & 단일 모델 인스턴스를 사용하는 동안() 모델의 '아이디'를 기반으로 urlDisplayPicBig & urlDisplayPicSmall를 업데이트합니다. 당신이 컬렉션 fetch을 수행 할 때

+2

나를 위해 일합니다. (http://jsfiddle.net/ambiguous/xUSLE/), 그게 뭐니 뭐니? –

+0

add() 대신 큰 차이가 있다고 생각합니다. 서버에서 JSON을 가져 오기 위해 fetch를 사용하고 있습니다. 하지만 fetch()는 모델과 컬렉션에서 다르게 동작합니까? – Saneef

+0

['Collection # fetch'] (http://documentcloud.github.com/backbone/#Collection-fetch)는 새로운 모델 인스턴스를 생성 할 것이고, 기존 모델은 컬렉션에서 제거되어 변경 이벤트가 없게됩니다; ['Model # fetch'] (http : //documentcloud.github.co.kr/backbone/# Model-fetch)은 모델을 현재 위치로 변경하고 변경 이벤트를 트리거합니다. 콜렉션에서'fetch'를 호출하고 있습니까? –

답변

2

:

컬렉션은

that will

이 모델의 새로운 목록 컬렉션을 교체 재설정 (또는 해시 속성)됩니다 끝에 "reset" 이벤트가 하나씩 발생합니다. [...] 인자없이 reset을 사용하면 콜렉션을 비우는 방법으로 유용합니다.

그래서 컬렉션의 fetch은 현재 컬렉션에있는 모든 모델을 제거하고 새로운 모델 인스턴스로 대체합니다. "change" 이벤트가 발생하면 "reset" 이벤트가 하나만 발생합니다.

당신은 모델에 fetch 할 때 : 서버의 상태가 현재 속성과 다른 경우

"change" 이벤트가 트리거됩니다.

그래서 fetch를 호출하면 꽤 많은 서버에서 데이터를 수동으로 모델을 변경 set를 호출 같은 로딩입니다.


요약 : Collection#fetch 어떤 "change" 이벤트, 단지 "reset" 이벤트를 트리거하지 않습니다; Model#fetch 뭔가가 변경되면 "change" 이벤트가 트리거됩니다.


다음 Model#parse를 사용하여 수신 JSON에 새로운 속성을 추가 할 수있는 새로운 모델 인스턴스를 만들 때 단지 몇 새 속성을 추가합니다.

+0

설명해 주셔서 감사합니다. 그래서 거기에 모델 내에서 컬렉션 # 가져 오기의 '재설정'이벤트를 얻을 수있는 방법이 없다고 가정합니다. : – Saneef

+0

@Saneef : 모델이 리셋 이벤트에서 살아남지는 않습니다. doSomething이해야 할 일에 대한 정보를 포함하도록 질문을 업데이트 할 수 있습니까? 더 좋은 방법이있을 수 있습니다. –

+0

질문을 업데이트했습니다. 자세한 내용은. 이벤트 문제에 대한 나의 의도가 지금보다 명확 해지기를 바랍니다. – Saneef

관련 문제