当我在 containerView 中添加相同类型视图的多个实例时,实际上存在相同的实例。我怎样才能使它们成为不同的实例?
我创建了一个小 jsbin 来说明这种情况。三个“窗口”的标题应该是“第一个窗口”、“默认标题”和“第三个窗口”,但都有“第三个窗口”标题。
我尝试使用单例选项将我的视图注册为 false,但没有任何成功。
App.register('view:window', App.Window, { singleton: false })
当我在 containerView 中添加相同类型视图的多个实例时,实际上存在相同的实例。我怎样才能使它们成为不同的实例?
我创建了一个小 jsbin 来说明这种情况。三个“窗口”的标题应该是“第一个窗口”、“默认标题”和“第三个窗口”,但都有“第三个窗口”标题。
我尝试使用单例选项将我的视图注册为 false,但没有任何成功。
App.register('view:window', App.Window, { singleton: false })
而不是在您的子视图中create
使用extend
,因此每次创建新的子视图时,ember 都会实例化新的子视图App.Window
:
App.Window = Ember.ContainerView.extend
classNames: ['window']
childViews: ['headerView', 'bodyView', 'footerView']
title: 'Default title'
headerView:
Ember.View.extend // <= extend instead of create
classNames: ['window-header']
template: Ember.Handlebars.compile('{{ view.parentView.title }}')
bodyView:
Ember.View.extend // <= extend instead of create
classNames: ['window-body']
template: Ember.Handlebars.compile('Body')
footerView:
Ember.View.extend // <= extend instead of create
classNames: ['window-footer']
template: Ember.Handlebars.compile('Footer')
仅使用create
您将拥有一个由任何已创建的共享子视图共享的单个实例App.Window
。像这样:
App.Window = Ember.Container.extend
headerView:
instance h1
bodyView:
instance b1
...
w1 = App.Window.create()
w1.get('childViews') // [instance h1, instance h2]
w2 = App.Window.create()
w2.get('childViews') // [instance h1, instance h2]
etc