【问题标题】:Using Ember.js and Handlebars, what is the difference between binding a template to a class view vs instance of view?使用 Ember.js 和 Handlebars,将模板绑定到类视图与视图实例有什么区别?
【发布时间】:2012-09-30 18:07:35
【问题描述】:

案例 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',
});

根本没有渲染。我再一次看不到这里发生了什么。

【问题讨论】:

    标签: javascript ember.js handlebars.js


    【解决方案1】:

    案例 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 断言失败(非缩小版本)。您正在定义一个使用模板的视图,然后在该模板内使用匿名模板再次呈现相同的视图。如果这是您想要的意思,请您提供一个用例,因为可能有一种更简单的方法可以完成您想要完成的工作。

    【讨论】:

    • 这对我很有帮助answer a problem 我在将参数传递给渲染调用视图时遇到了问题,其中最终属性只会存在于视图上,而不是控制器或模型上。 {{render}}{{#view}} 成为相同上下文陷阱的受害者仍然让我感到奇怪。我认为您可以在任何车把字段帮助器中使用视图、控制器或模型中的任何属性,例如{{&lt;prop_name&gt;}}.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-15
    • 1970-01-01
    • 1970-01-01
    • 2017-03-18
    • 1970-01-01
    • 1970-01-01
    • 2011-01-17
    相关资源
    最近更新 更多