현재 뷰에 대한 파괴 / 제거 방법을 구현하려고 시도하고 있지만 모든 뷰에서 작동하는 일반적인 솔루션을 얻을 수 없습니다.
나는, 컨트롤러에 부착하는 이벤트가있을 것이라고 기대했다 그래서 이전 뷰를 파괴를 통해 새로운 요청이 올 때 그 다음 새로운 사람을로드합니다.
각 뷰에 대해 제거 기능을 구축하지 않고도이를 수행 할 수있는 방법이 있습니까?
답변
모든 정보를 모른 채 … 재설정 트리거를 모델 또는 컨트롤러에 바인딩 할 수 있습니다.
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의 +를 사용하는 경우, 사용 수 listenTo
및stopListening
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]);
}