현재 뷰에 대한 파괴 / 제거 방법을 구현하려고 시도하고 있지만 모든 뷰에서 작동하는 일반적인 솔루션을 얻을 수 없습니다.
나는, 컨트롤러에 부착하는 이벤트가있을 것이라고 기대했다 그래서 이전 뷰를 파괴를 통해 새로운 요청이 올 때 그 다음 새로운 사람을로드합니다.
각 뷰에 대해 제거 기능을 구축하지 않고도이를 수행 할 수있는 방법이 있습니까?
현재 뷰에 대한 파괴 / 제거 방법을 구현하려고 시도하고 있지만 모든 뷰에서 작동하는 일반적인 솔루션을 얻을 수 없습니다.
나는, 컨트롤러에 부착하는 이벤트가있을 것이라고 기대했다 그래서 이전 뷰를 파괴를 통해 새로운 요청이 올 때 그 다음 새로운 사람을로드합니다.
각 뷰에 대해 제거 기능을 구축하지 않고도이를 수행 할 수있는 방법이 있습니까?
답변:
모든 정보를 모른 채 ... 재설정 트리거를 모델 또는 컨트롤러에 바인딩 할 수 있습니다.
this.bind("reset", this.updateView);
보기를 재설정하려면 재설정을 트리거하십시오.
콜백의 경우 다음과 같이하십시오.
updateView: function() {
view.remove();
view.render();
};
this.remove()
통화 this.stopListening()
및 this.$el.remove()
. 첫 번째는를 사용하여 추가 된 모든 이벤트 리스너를 제거합니다 this.listenTo(...)
. 두 번째는 jQuery를 사용하여 추가하는 모든 이벤트 리스너를 제거합니다. 둘 사이에서 이벤트 리스너를 추가하는 다른 방법을 사용하지 않는 한 다루어야합니다. 그래서이 대답은 정확하고 저로부터 +1을받습니다.
뷰가 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);
}
나에게는 과잉 살인처럼 보였지만 다른 접근 방식은 완전히 트릭을 수행하지 못했습니다.
this.$el
대신 사용해야하지만$(this.el)
this.remove()
입니까?
나는 내가 파티에 늦었다는 것을 알고 있지만, 이것이 다른 누군가에게 도움이되기를 바랍니다. 당신이 백본 v0.9.9의 +를 사용하는 경우, 사용 수 listenTo
및stopListening
initialize: function () {
this.listenTo(this.model, 'change', this.render);
this.listenTo(this.model, 'destroy', this.remove);
}
stopListening
에 의해 자동으로 호출됩니다 remove
. 여기 와 여기에서 더 많은 것을 읽을 수 있습니다.
나는 이것이 효과가 있다고 생각한다
destroyView : function () {
this.$el.remove();
}
this.stopListening()
다음과 return this
좋은 측정을위한
문제를 해결하는 방법을 사용할 수 있습니다!
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]);
}