如何在Handlebars中引用子视图?

时间:2012-09-14 09:18:17

标签: ember.js handlebars.js

我使用以下代码在我的文档中嵌入了一系列视图:

{{view App.View.PersonProfile.Name itemBinding="person"}}

我正在使用以下代码作为我的主容器视图及其两个子视图:

App.View.PersonProfile = Ember.ContainerView.extend(
{
    tagName: 'a',
    person:  null,
    childViews: ['Name', 'NameAvatar'],

    click: function()
    {
        App.View.Window.Profile.create({ person: this.get('person') });
    },

    name: Ember.View.extend(
    {
        template: Ember.Handlebars.compile('{{ view.parentView.person.formalName }}')
    }),

    nameAvatar: Ember.View.extend(
    {
        template: Ember.Handlebars.compile
        (
            '<img class="avatar" {{bindAttr src="view.parentView.person.avatar"}} />' +
            '<div class="name">{{ view.parentView.person.formalName }}</div>'
        )
    })
});

然而,当我运行脚本时,显然无法找到“App.View.PersonProfile.Name”。这是预期的行为吗?如果是这样,解决方案是什么? extend摘要PersonProfile更好吗?

1 个答案:

答案 0 :(得分:1)

这不起作用的原因可能是您的应用中没有属性“App.View.PersonProfile.Name”。您的代码定义了一个名称小写为n的属性,该属性将存在于PersonView的实例中。所以,这里存在多层问题。

更好的方法是使用模板从Ember.View扩展PersonView。如果您需要子视图(它看起来与您的示例不同,但可能还有其他需求),您可以从与PersonView关联的模板中引用它们。

如果您尝试这种方法并遇到问题,请发布一个说明可执行代码中的问题的JS小提琴。你可以从emberjs.com/community上的那个开始。