我正在创建一个单页应用程序,我对骨干很新。我在创建使用相同wrapper-div的多个视图时遇到问题。
我的设置:
我为所有观点添加了一个关闭功能:
Backbone.View.prototype.close = function(){
this.remove();
this.off();
if (this.onClose){
this.onClose();
}
}
我有一个wrapper-div,我想渲染视图,删除它们并渲染新的视图。所以我的SetupView看起来像这样:
app.SetupView = Backbone.View.extend({
el: '#my_view_wrapper',
...
});
从我交换视图的函数中,我关闭当前(打开)视图,如下所示:
var v = this.model.get('view');
v.close();
问题
我的问题是我有多个视图使用相同的wrapper-div。但是当我关闭一个视图时,这个wrapper-div似乎被删除了,我尝试创建的下一个视图找不到这个div。
我想有一个简单的解决方案?我想重用相同的包装器,只删除其中的视图,而不是包装器本身。
答案 0 :(得分:25)
只是添加(供以后参考):另一个选项是覆盖子视图remove
,以便它只清空$el
而不是删除它。例如。
remove: function() {
this.$el.empty().off(); /* off to unbind the events */
this.stopListening();
return this;
}
我个人更喜欢这个,因为它不需要插入没有实际用途的包装元素。
答案 1 :(得分:17)
在您的方案中,请勿使用现有DOM元素作为“el”值。 Backbone将为您创建元素。实例化视图时,可以执行以下操作将其附加到现有的包装元素。
$(viewName.render().el).appendTo('#my_view_wrapper');