0

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

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"
});

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

我有点理解{{view}}{{view}}一些 html/handlebars 的情况,其中动作和事件将从 javascript 中的视图定义中应用。另外,我很欣赏您可以拥有一个无块的单块{{view MyApp.thingView}},它将视图中指定的模板呈现到使用视图助手的位置(以及在视图定义中提供可用属性)。

{{view.x}}实例化视图吗?如果是,为什么示例使用创建而不是扩展。或者是指全局变量视图的视图(我假设不是,因为这是把手。)可以使用扩展。这个表单是否只是想说您可以在视图定义已templateName设置为模板的模板中访问视图的属性?

感谢您的任何澄清

更新:再次查看示例后,看起来 var 用于其他片段中的编程附加。所以我们可以假设这就像在两个 {{view App.aView}}{{/view}} 元素和视图中拥有模板。表单允许您获取 App.aView 中的属性。

4

1 回答 1

1

<更新>

针对问题中的更新:

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

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

</更新>

当您{{view.propertyName}}在 Handlebars 模板中看到时,这意味着您正在使用/呈现您所在视图中的属性,因此您最初的假设是正确的。例如:

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}}部件将在 View ( HelloView) 的范围内查找名为的属性greeting(对于任何这些属性都是相同的),而不是在父视图中(ApplicationView这是隐含的)。您必须{{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为表示略有不同的事物。为了区分哪个是哪个,您可以使用viewandparentView关键字来访问属性:

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

相关参考:

于 2013-03-28T21:47:59.993 回答