[javascript] Backbone.js에서보기 삭제 또는 제거

현재 뷰에 대한 파괴 / 제거 방법을 구현하려고 시도하고 있지만 모든 뷰에서 작동하는 일반적인 솔루션을 얻을 수 없습니다.

나는, 컨트롤러에 부착하는 이벤트가있을 것이라고 기대했다 그래서 이전 뷰를 파괴를 통해 새로운 요청이 올 때 그 다음 새로운 사람을로드합니다.

각 뷰에 대해 제거 기능을 구축하지 않고도이를 수행 할 수있는 방법이 있습니까?



답변

모든 정보를 모른 채 … 재설정 트리거를 모델 또는 컨트롤러에 바인딩 할 수 있습니다.

this.bind("reset", this.updateView);

보기를 재설정하려면 재설정을 트리거하십시오.

콜백의 경우 다음과 같이하십시오.

updateView: function() {
  view.remove();
  view.render();
};


답변

뷰가 DOM에서 제거되었을뿐만 아니라 이벤트에서 완전히 언 바운드되었는지 절대적으로 확인해야했습니다.

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);

}

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


답변

나는 내가 파티에 늦었다는 것을 알고 있지만, 이것이 다른 누군가에게 도움이되기를 바랍니다. 당신이 백본 v0.9.9의 +를 사용하는 경우, 사용 수 listenTostopListening

initialize: function () {
    this.listenTo(this.model, 'change', this.render);
    this.listenTo(this.model, 'destroy', this.remove);
}

stopListening에 의해 자동으로 호출됩니다 remove. 여기여기에서 더 많은 것을 읽을 수 있습니다.


답변

이것이 제가 사용해온 것입니다. 어떤 문제도 보지 못했습니다.

destroy: function(){
  this.remove();
  this.unbind();
}


답변

현재 백본 문서에 따르면 ….

view.remove ()

DOM에서 뷰와 해당 el을 제거하고 stopListening을 호출하여 뷰에 listenTo’d가있는 바인딩 된 이벤트를 제거합니다.


답변

나는 이것이 효과가 있다고 생각한다

destroyView : function () {
    this.$el.remove();
}


답변

문제를 해결하는 방법을 사용할 수 있습니다!

initialize:function(){
    this.trigger('remove-compnents-cart');
    var _this = this;
    Backbone.View.prototype.on('remove-compnents-cart',function(){
        //Backbone.View.prototype.remove;
        Backbone.View.prototype.off();
        _this.undelegateEvents();
    })
}

다른 방법 : 다음과 같이 전역 변수를 만듭니다._global.routerList

initialize:function(){
    this.routerName = 'home';
    _global.routerList.push(this);
}
/*remove it in memory*/
for (var i=0;i<_global.routerList.length;i++){
    Backbone.View.prototype.remove.call(_global.routerList[i]);
}