0

컬렉션이있는 모델이 있습니다. 내 웹 응용 프로그램 내에서 프로젝트 모델을 가지고 있으며 "공동 작업자"라는 특성이 있는데이 특성은 실제로 사용자 모음입니다. 나는 다음을 내보기의 초기화에서 모델에서 백본 중첩 컬렉션 추가 수신 대기

,

this.model.get('collaborators').on('change', alert("!!"), this);

보기 최초로드 내가 firther 다음를 발생 내가 이벤트를보기로, 경고를 얻을

,

var newModel = new app.User({ id: this.clickedElement.data('userId') }); 
       console.log(this.model.get(this.formSection)); // shows that the collection has 4 models 
       newModel.fetch({ 
        success: function() { 

         that.model.get(that.formSection).add(newModel); 
         console.log(that.model.get(that.formSection)); //shows that the collection has 5 models 

        } 

       }); 

위의 코드에서 볼 수 있듯이 공동 작업자 컬렉션을 로깅하고 있으며 성공 메서드에서 가져온 후에 길이가 4 인 것을 보여줍니다. 그 컬렉션에 방금 가져온 모델을 추가 한 다음 수집 기록하기 다시 한 번 이번에는 길이가 5를 반환합니다.

이것은 내게 성공적이라는 것을 의미하므로 초기 페이지보기 후에 "add"이벤트 리스너가 실행되지 않습니까?

+0

난 .. 단지'change'을'add' 청취자가 표시되지 않습니다 -하지만 공동 작업자 컬렉션입니다. 컬렉션은'change' 이벤트를 발생시키지 않습니다. 부모 모델까지 버블 링 될지 확실하지 않습니다. – Lix

+0

'this.model.get ('collaborators '). on ('add ', alert ("!!"), this);' 뷰의 초기로드에서만 계속 발생하며 컬렉션에 데이터를 추가 할 때가 아닙니다. – Udders

+0

상위 모델에서'change' 이벤트 만 사용해 보았습니까? – Lix

답변

0

문제는 on 메서드의 두 번째 인수로 일부 함수를 전달해야한다는 것입니다. 그러나 이벤트 바인딩 순간에 alert을 바로 발사하고 기능 대신에 alert의 결과를 전달합니다.

this.model.get('collaborators').on('change', function(){ 
    alert("!!"); 
}); 

업데이트 :을하지만 당신은 당신이 잡으려면 이벤트를 명확히해야한다 이 제대로 작동합니다. 가져 오기 (또는 다른 프로세스) 중에 발생하는 모든 이벤트는 backbone.js 파일에서 trigger 메서드 호출을 검색하여 찾을 수 있습니다.

업데이트 :은 또한 해고 모든 이벤트를 잡기 위해이 코드를 사용할 수 있습니다 : 당신이 공동 작업자의 변경 이벤트와 결합하면 백본의 listenTo 이벤트를 사용한다

collaborators.on('all', function(){ 
    /** 
    * `arguments` object contains all of arguments passed to the function. 
    * @see http://backbonejs.org/#Events-on for more details about `all` 
    * catching. 
    */ 
    console.log(arguments); 
}); 
0

.

this.listenTo(this.model.get('collaborators'), "change", function(){alert("!!"), this); 
뷰/제거 폐쇄됩니다 때 this.listenTo 사용의 장점은

http://backbonejs.org/#Events-listenTo

는 백본은 자동으로 자동으로 이벤트 바인딩을 해제 할보기를 일으키는 this.stopListening를 호출합니다. 이렇게하면 이벤트를 정리하고 팬텀 뷰를 방지하는 데 도움이됩니다.

http://backbonejs.org/#Events-stopListening