Emberjs,禁用特定视图的单例

时间:2013-09-05 15:40:16

标签: ember.js

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

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

我试图用singleton选项注册我的视图为false但没有任何成功。

  

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

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

1 个答案:

答案 0 :(得分:0)

而不是create在您的子视图中使用extend,因此每次创建新的App.Window时,ember都会实例化新的子视图:

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