在文档中,第一个视图示例如下所示:
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中的属性。
答案 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
的属性定义,以表示略有不同的内容。为了区分哪一个,您可以使用view
和parentView
关键字来访问属性:
<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>
相关参考: