2011-12-04 4 views
5
var CheckboxView = Backbone.View.extend({ 
     tagName:'div', 
     template: _.template(item_temp,{}), 
     events:{ 
      'click .checkoff_friend':'toggleCheckFriend', 
     }, 
     initialize: function(){ 
     }, 
     render:function(){ 

     }, 
     toggleCheckFriend:function(){ 
      //destroy this View instance. 
     } 
    }); 

var cv = new CheckboxView(); 

인스턴스를 어떻게 파괴합니까? 토글이 활성화되면, 나는 그 뷰의 인스턴스를 영원히 사라지게하고 싶다.이 Backbone.js보기 인스턴스를 어떻게 파괴합니까?

답변

3

인스턴스를 변수에 할당하지 마십시오 (백본의보기는 이벤트에 의해 구동되므로 필요가 없습니다). toggleCheckFriend 메서드에서 모든 데이터와 이벤트를 제거하면 가비지 수집에 인스턴스를 사용할 수있게됩니다. .

toggleCheckFriend:function(){ 
    $(this.el).removeData().unbind(); 

    } 
+0

재미 있고 ... – Sander

0

보기에는 모델이 있습니까? 당신이합니다 (dB)에서 제거 된 모델을 원하는 경우에

, 당신은 사용할 수 있습니다 : 그 후 this.model.destroy()

을, 당신은 this.remove()를 호출하여 DOM에서 바로보기 자체를 제거 할 수 있습니다. 설명서에는 $(this.el).remove()과 동일한 내용이 나와 있습니다.

참고 그 '이'위의보기 자체를 의미한다, 그래서 당신은 _.bindAll(this, 'toggleCheckFriend')

+0

_.bindAll (this, 'toggleCheckFriend')은 필요하지 않습니다. DOM 이벤트 콜백의 컨텍스트가 자동으로 뷰가됩니다. –

+0

@JohnnyO : 파이핑 명령을 내릴 때 주로 사용합니다. 사용자를 직접 트리거하는 요소 외에 트리거 할 수있는 요소가있는 경우를 대비하여. (즉, 페이지에 CheckAllCheckBox가 있음) – rkw

6

비슷한 질문에 대한 나의 대답은 잘 받았습니다, 나를 위해 잘 작동하고있다 할 것입니다. (. 오리지널 질문 https://stackoverflow.com/a/11534056/986832) :

내가 view가 DOM에서 제거되지 않은 확신뿐만 아니라 이벤트 완전히 언 바운드해야했다 여기 내 destroy_view 기능

응답을 살펴 보겠습니다.

destroy_view: function() { 

    //COMPLETELY UNBIND THE VIEW 
    this.undelegateEvents(); 

    $(this.el).removeData().unbind(); 

    //Remove view from DOM 
    this.remove(); 
    Backbone.View.prototype.remove.call(this); 

    } 

나에게는 과잉 인 것처럼 보였지만, 다른 접근 방식은 완전히 그 트릭을 수행하지 못했습니다.

관련 문제