3

ケース I. テンプレートをビューのインスタンスにバインドします。

たとえば、次のテンプレートがあるとします。

    <script type="text/x-handlebars" data-template-name="instance-template">
        <b> Name: </b> {{ name }}
    </script>

その後、ビューのインスタンスをそれにバインドし、ドキュメントに追加できます (簡単にするために、一部のコントロール レイヤーにバインドするのではなく、ビューでパラメーター名を宣言します)。

App.instanceView = Ember.View.create({
    templateName: 'instance-template',
    name: 'hello world'
}).append();

ここで舞台裏で何が起こっているのですか?テンプレート名を指定することで、ビューのこのインスタンスは何らかの形でテンプレートを取得し、バックグラウンドで渡されたパラメーターでコンパイルしていますか?

ケース II。テンプレートをクラス ビューにバインドしていますが、テンプレートに名前がありません。

ただし、次のようなクラス ビューにテンプレートをバインドしたい場合:

App.ViewClass = Ember.View.extend({
    name: 'hello world',
});

ドキュメントでは、次の形式のテンプレートを使用しています。

<script type="text/x-handlebars">
    {{ #view App.ClassView }}
        This part renders: {{ name }} 
    {{ /view }}
</script>

これを行うと、何らかの理由でこれが機能しないことに注意してください。テンプレートの「This part renders:」という引用は実際にレンダリングされますが、{{ name }} タグはレンダリングされません。理由がわかりません。

ケース III。テンプレートがクラス ビューにバインドされ、テンプレートに名前が付けられます。

さらに、上記のテンプレートに名前を付けると、次のようになります。

<script type="text/x-handlebars" data-template-name = 'class-template'>
    {{ #view App.ClassView }}
        This part renders: {{ name }} 
    {{ /view }}
</script>

ビューを次のように変更します

App.ViewClass = Ember.View.extend({
    templateName: 'class-template',
    name: 'hello world',
});

何もレンダリングされません。繰り返しますが、ここで何が起こっているのかわかりません。

4

1 に答える 1

4

ケース 1 そうですね。ビューがレンダリングされている (コンテキストがビューであると想定している) 場合、{{name}}これが表示されると、 と同等になりinstanceView.get('name')ます。

ケース 2 匿名テンプレートはコンテキストを変更しません。{{#view}}コンテキスト内でテンプレートを定義すると、変更されません。{{#view}}ヘルパーで使用されたビューのコンテキストを取得するには、view.name. 例えば:

App.ViewClass = Ember.View.extend({
    name: 'hello world',
});

<script type="text/x-handlebars">
    {{name}} <!-- lets pretend this is "something else" -->
    {{#view App.ClassView}}
        This part renders: {{name}} <!-- "something else" -->
        {{view.name}} <!-- "hello world" -->
    {{/view}}
</script>

ケース 3 この例は意味がなく、おそらく Ember (縮小されていないバージョン) でアサーションが失敗するはずです。テンプレートを使用するビューを定義し、そのテンプレート内で匿名テンプレートを使用して同じビューを再度レンダリングします。これが意図された意味である場合は、ユースケースを提供してください。おそらく、達成しようとしていることにもっと簡単な方法があるからです。

于 2012-09-30T21:09:41.877 に答える