2012-03-01 4 views
2

Backbone.js 뷰가 제거되면 함수를 실행해야합니다. 나는 생성자와 같은 것을 추측한다. 아래 코드는 제가 작성한 스 니펫입니다. 나는 그것이 작동하지 않을 것이라는 점을 알고있다. 그러나, 나는 과거에이 작업을 수행하는 함수를 작성하는 방법에 대한 비디오 자습서를 보았습니다. de-constructing 함수를 실행해야하는 이유는 뷰가 제거 될 때 뷰 내부의 간격을 지우는 것입니다.Backbone.js fire 이벤트 on .remove()

 
ViewWeather = Backbone.View.extend({ 
     interval: setInterval(function() {console.log('interval fire');}, 1000), 

     // made up function 
     deconstructor: function() { 
      // if the view is removed 
      clearInterval(this.interval); 

    } 
}); 

var viewweather = new ViewWeather(); 

답변

8

이 블로그 게시물

http://lostechies.com/derickbailey/2011/09/15/zombies-run-managing-page-transitions-in-backbone-apps/

가장 주목할만한 부분 당신에게 더 좋은 정보를 제공해야합니다 오버로드 작동합니다

Backbone.View.prototype.close = function(){ 
    this.remove(); 
    this.unbind(); 
    if (this.onClose){ 
    this.onClose(); 
    } 
} 
,210

다음

MyView = Backbone.View.extend({ 
    initialize: function(){ 
    this.model.bind("change", this.render, this); 
    }, 
    render: function(){ ... }, 

    onClose: function(){ 
    this.model.unbind("change", this.render); 
    } 

}); 
+1

당신을 사랑합니다. 이 코드에 대해 고마워. – kr1zmo

+1

필자는 실제로 개발 버전의 백본을 뜯어보고보기에서 제거 기능을 편집했습니다. 어쩌면 내가 github에 포크를 만들어야합니다. lol, 이제보기가 제거되면 정리를 위해 초기화가 실행되지 않습니다. 따라서보기에 초기화를 추가하는 것과 마찬가지로 초기화를 추가 할 수도 있습니다. 거기의 굉장한 재료는 형제 다! remove : function() { this. $ el.remove(); if (this.uninitialize) { this.uninitialize(); } 이것을 반환하십시오. } – kr1zmo

+0

this.remove()를 호출하면 this.undelegateEvents()가 자동으로 호출됩니까? 델리게이트 이벤트를 제거합니까? (클래스 해시의 이벤트) – ccsakuweb

4

난 내가 제대로 이해 있는지 확실하지 않습니다,하지만 당신이 보여있는 방법은 올바른 것 같다

dispose: function(id) { 
    clearInterval(this.interval); 
    this.remove(); 
} 

당신은 예를 들어,에 의해, 자신을 처분 전화를해야 할 것 이벤트 : 댓글 후

initialize: function(opts) { 
    router.bind('route:leave', this.dispose, this); 
}, 

편집 :이 remove

remove: function() { 
    clearInterval(this.interval); 
    Backbone.View.prototype.remove.call(this); 
} 
+0

나는 파괴 또는 뷰를 제거 할 때 함수를 실행에 대해 이야기하고있다. 이 경로가 변경되면 감지하고 있지만 도움을 주셔서 감사합니다. – kr1zmo

+0

당신은'remove()'를 오버로드 할 수 있습니다 – mindandmedia