不理解emberjs {{view.x}}

时间:2013-03-28 21:33:58

标签: ember.js

在文档中,第一个视图示例如下所示:

HTML:

<html>
  <head>
    <script type="text/x-handlebars" data-template-name="say-hello">
      Hello, <b>{{view.name}}</b>
    </script>
  </head>
</html>

JS:

var view = Ember.View.create({
  templateName: 'say-hello',
  name: "Bob"
});

也许我是一个布偶但我真的不明白发生了什么。有人可以帮忙吗

我理解一些html /把手周围{{view}}{{view}}的情况,其中的动作和事件将应用于javascript中的视图定义。我还要感谢您可以使用无块单{{view MyApp.thingView}},它将视图中指定的模板呈现到使用视图助手的位置(以及在视图定义中提供可用属性)。

{{view.x}}是否实例化了一个视图,如果是,为什么该示例使用create而不是extend。或者是视图引用全局var视图(我假设没有,因为这是把手。)可以扩展使用。这个表单是否只是试图说您可以访问模板中的视图属性,其中视图定义已将templateName设置为模板?

感谢您的任何澄清

更新: 再次查看示例后,看起来var用于其他代码段中的编程追加。因此,我们可以假设这就像在两个{{view App.aView}} {{/ view}}元素和视图中使用模板一样。 form允许您获取App.aView中的属性。

1 个答案:

答案 0 :(得分:1)

<强>&LT;更新&GT;

回应问题中的更新:

如果该视图没有与之关联的任何模板,则应使用{{#view App.SomeView}} ... {{/view}}。 另一方面,如果已通过命名约定或{{view App.SomeView}}属性为此视图创建了模板,则应使用templateName。示例:

{{view Ember.TextField valueBinding="view.userName"}}

<强>&LT; /更新&GT;

当您在Handlebars模板中看到{{view.propertyName}}时,这意味着您正在从您所在的View中使用/渲染属性,因此您的初始假设是正确的。例如:

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中定义的属性时,您必须使用{{view.propertyName}}。 可以直接访问控制器中定义的属性而无需前缀。

其中一个原因是确保您正在调用正确的属性。请考虑以下事项:

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的属性定义,以表示略有不同的内容。为了区分哪一个,您可以使用viewparentView关键字来访问属性:

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

相关参考: