<アップデート>
質問の更新に応じて:
{{#view App.SomeView}} ... {{/view}}
そのビューにテンプレートが関連付けられていない場合に使用する必要があります。一方、{{view App.SomeView}}
命名規則またはtemplateName
プロパティを介してこのビュー用にテンプレートが作成されている場合は、使用する必要があります。例:
{{view Ember.TextField valueBinding="view.userName"}}
</アップデート>
Handlebars テンプレートで表示{{view.propertyName}}
される場合、それは現在のビューからプロパティを消費/レンダリングしていることを意味するため、最初の仮定は一種の正しいものです。例えば:
App = Em.Application.create();
App.HelloView = Em.View.extend({
welcome: 'Willkommen',
userName: 'DHH',
greeting: function() {
return this.get('welcome') + ' ' + this.get('userName');
}.property('welcome', 'userName')
});
次に、アプリケーション テンプレートで:
<script type="text/handlebars">
<h1>App</h1>
{{#view App.HelloView}}
{{view.greeting}}
{{/view}}
</script>
この場合、パーツはそのビュー ( ){{view.greeting}}
のスコープで指定されたプロパティ(これらのプロパティのいずれでも同じ) を検索し、親ビュー (暗黙的に示されます) は検索しません。ビューで定義されたプロパティを呼び出すたびに使用する必要があります。コントローラーで定義されたプロパティには、プレフィックスなしで直接アクセスできます。HelloView
greeting
ApplicationView
{{view.propertyName}}
この理由の 1 つは、正しいプロパティを呼び出していることを確認することです。次の点を考慮してください。
App = Em.Application.create();
App.ApplicationView = Em.View.extend({
userName: 'David'
});
App.HelloView = Em.View.extend({
welcome: 'Willkommen',
userName: 'DHH',
greeting: function() {
return this.get('welcome') + ' ' + this.get('userName');
}.property('welcome', 'userName')
});
これで、アプリケーション ビューと内部ビューの両方が、userName
わずかに異なるものを表す名前のプロパティで定義されました。どれがどれであるかを区別するために、view
およびparentView
キーワードを使用してプロパティにアクセスできます。
<script type="text/handlebars">
<h1>App</h1>
<!-- this comes from the ApplicationView -->
<h3>{{view.userName}}'s Profile</h3>
{{#view App.HelloView}}
<!-- this comes from the HelloView -->
{{view.welcome}} {{view.userName}}
{{/view}}
</script>
この例で本名とニックネームを使用したい/使用する必要がある場合は、次のようにする必要があります。
<script type="text/handlebars">
<h1>App</h1>
{{#view App.HelloView}}
<!-- this comes from the ApplicationView -->
<h3>{{parentView.userName}}'s Profile</h3>
<!-- this comes from the HelloView -->
{{view.welcome}} {{view.userName}}
{{/view}}
</script>
関連参照: