1

当我在 containerView 中添加相同类型视图的多个实例时,实际上存在相同的实例。我怎样才能使它们成为不同的实例?

我创建了一个小 jsbin 来说明这种情况。三个“窗口”的标题应该是“第一个窗口”、“默认标题”和“第三个窗口”,但都有“第三个窗口”标题。

我尝试使用单例选项将我的视图注册为 false,但没有任何成功。

App.register('view:window', App.Window, { singleton: false })

http://jsbin.com/oHEweXO/10/edit?html,js,输出

4

1 回答 1

0

而不是在您的子视图中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
于 2013-09-05T17:00:57.093 回答