如何在车把中引用儿童视图?

时间:2012-05-08 00:12:53

标签: ember.js collectionview

我有一个集合视图如下:

Ember.Widget.ParentView = Ember.CollectionView.extend({

    content: ['childView1', 'childView2'],

    fnameBinding: ChildView1.fname,
    lnameBinding: ChildView1.lname,

    ChildView1: Ember.View.extend({
        templateName: 'ChildView1',

        fname: 'David',
        lname: 'Johnson',
    }),

    ChildView2: Ember.View.extend({
        fnameBinding: '_parentView.fname',
        lnameBinding: '_parentView.lname',
    })
});

如果我想在ChildView1.handlebar中显示名称,我该如何引用fname?以下不起作用:

<script type="text/x-handlebars" name="ChildView1">
{{fname}}{{lname}}
</script>

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

使用CollectionView:

Ember.CollectionView内容应该是对象的集合(请参阅Ember.CollectionView documentation):

  

Ember.CollectionView是一个Ember.View后代,负责管理集合(数组或类似数组的对象),方法是维护数组中每个项目的子视图对象和相关的DOM表示,并确保子视图及其关联

添加,删除或替换数组中的项目时,将更新呈现的HTML

例如,您可以创建一个具有fName和lName属性的模型App.Name(此处默认设置为null):

App.Name = Ember.Object.extend({
  fName: null,
  lName: null
});

然后创建此模型的实例:

App.name1 = App.Name.create({fName: 'David', lName: 'Johnson'});
App.name2 = App.Name.create({fName: 'Stack', lName: 'Overflow'});

最后,在CollectionView中显示它们:

App.ParentView = Ember.CollectionView.extend({
  content: [App.name1, App.name2],
  itemViewClass: Ember.View.extend({
    template: Ember.Handlebars.compile('firstName: {{content.fName}}, lastName: {{content.lName}}')
  }),
});

你可以在这个小提琴中试试:http://jsfiddle.net/Ev3mR/

使用观看次数

你也可以在这个小提琴中实现这一点:http://jsfiddle.net/y4FUr/