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();

这里的幕后究竟发生了什么?通过指定模板名称,这个视图实例是否以某种方式获取模板并使用后台传递的参数对其进行编译?

案例二。将模板绑定到类视图,模板未命名。

但是,如果我想将模板绑定到类视图,例如:

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 }} 标签未呈现。我不知道为什么。

案例三。模板绑定到类视图,模板被命名。

另外,如果我命名上面的模板:

<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 回答