好吧,我不知道 0.9.8 和 1.0-pre 之间到底添加了什么,但我认为已经做了一些工作以避免内存泄漏。然后正如你所说,从containerView中删除时,视图似乎被破坏了。我找到的解决方案是在每次需要时创建视图。我认为这不是最佳解决方案。我会尝试做得更好,尤其是通过使用childViews.Ember.ContainerView
这是非常接近您的实现:
Test = Ember.Application.create();
Test.TabPanel = Ember.View.extend({
templateName: 'tabpanel',
tagName: 'span',
init: function() {
this._super();
this.set('oTabPanelFrame', Ember.View.create());
},
click1: function(event) {
event.context.set('oTabPanelFrame', event.context.get('view1').create());
},
click2: function(event) {
event.context.set('oTabPanelFrame', event.context.get('view2').create());
},
view1: Ember.View.extend({
defaultTemplate: Ember.Handlebars.compile("View1's contents")
}),
view2: Ember.View.extend({
defaultTemplate: Ember.Handlebars.compile("View2's contents")
}),
});
var oMyPanel = Test.TabPanel.create();
oMyPanel.appendTo('#content');
更新
由于这对你不起作用,对于 1.0 版本,我认为实现它的首选方法是使用outlets. 在这里,有一个很好的例子来说明它是如何实现的:emberjs - how to mark active menu item using router infrastructure
我已经修改了小提琴,以向您展示如何在切换视图时保持状态。事实上,当视图被“连接”时,它们也每次都被实例化。但是状态应该保存在控制器或模型中。
这是小提琴:http: //jsfiddle.net/Sly7/z8ssG/11/