2011-11-16 3 views
0

다음과 같이 정의 된 표준 Backbone.js 컬렉션이 있습니다.Backbone.js : 발사하지 않는 콜렉션의 이벤트 추가

class Observation extends Backbone.Model 

class Observations extends Backbone.Collection 
    model: Observation 

다음과 같이 컬렉션의 재설정 이벤트에 대한 이벤트 처리기에서 이와 같은 추가 이벤트를 바인딩합니다.

 collectionReset: (collection) => 
    @collection.bind 'add', @elementAdded 

문제는 이벤트가 발생하지 않습니다. 나는 중단 점을 설정하고 코드를 살펴 보았고 추가 이벤트가 발생하는 것을 멈추게하는 다음 줄 (backbone.js 0.5.3의 627 개)이있다.

_onModelEvent: function (ev, model, collection, options) { 
    if ((ev == 'add' || ev == 'remove') && collection != this) return; 

그리고 그것은 구체적으로 다음과 같은 비교이다. :

collection != this 

콜렉션 인수는 'this'참조와 다릅니다.

이전에 이런 일을 본 사람이 있습니까? 아니면 내가 잘못하고있는 사람을 지적 할 수 있습니까?

+1

어디에서 '@collection.bind 'add', @ elementAdded'를 호출할까요? – fancy

+0

질문을 업데이트했습니다. 보기의 초기화 프로그램과 위에서 설명한 재설정 이벤트 처리기 모두에서 바인드를 추가하려고했습니다. – dagda1

+0

콜백에 올바른 범위를 설정 했습니까? 참조 : http://documentcloud.github.com/backbone/#FAQ-this –

답변

0

코드에 몇 가지 의심스러운 점이 있습니다. 귀하의 collectionReset 메서드는 collection 매개 변수를 취하지 만 바인딩하려고 시도한 것처럼 보입니다 (@collection). 이것은 다른 것입니다. 전달되는 매개 변수 "collection"에서 bind를 호출하려면 @collection.bind이 아니라 collection.bind을 사용해야합니다.

대부분 모델 클래스 (컬렉션 포함)에서보기로 이벤트를 바인딩합니다.이 경우 일반적으로 모델을 바인딩 용으로 참조하기 만합니다 (예 : @model.bind 'add', someMethod). Observations을 정의하는 코드에서 비슷한 것을 시도해야합니다.

관련 문제