0

次のコードを使用して、一連のビューをドキュメントに埋め込みました。

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

そして、メインのコンテナ ビューとその 2 つのサブビューに次のコードを使用しています。

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

4

1 に答える 1

1

これが機能しない理由は、プロパティ「App.View.PersonProfile.Name」がアプリに存在しない可能性があります。コードは、PersonView のインスタンスに存在する名前に小文字の n を使用してプロパティを定義します。したがって、ここには複数の層の問題があります。

これにアプローチするより良い方法は、テンプレートを使用して Ember.View から PersonView を拡張することです。サブビューが必要な場合 (あなたの例からはそうではないように見えますが、他のニーズがあるかもしれません)、PersonView に関連付けられたテンプレートからそれらを参照します。

このアプローチを試して問題が発生した場合は、実行可能コードの問題を示す JS Fiddle を投稿してください。emberjs.com/community にあるものから始めることができます。

于 2012-09-14T10:28:50.617 に答える