在Ember中,为什么我的模板需要{{model.key}},而不仅仅是{{key}}?

时间:2015-07-17 15:27:21

标签: ember.js handlebars.js

我正在尝试Ember,并发现与文档的差异。我使用Ember CLI来ember generate template indexember generate route index。然后我在index.js中设置了一个简单的模型:

model: function () {
    return {name: "Joe"};
}

从我阅读的文档和示例中,我希望能够在index.hbs模板中使用{{name}}来访问此值,但我只能使用{{model.name}}获取值。为什么呢?

2 个答案:

答案 0 :(得分:2)

在Ember 1.11之前,你可以使用ObjectController,它就像对应路由model的代理一样,你可以为{{name}}model.name

在Ember 1.11中弃用了ObjectController,详情如下: http://emberjs.com/deprecations/v1.x/#toc_objectcontroller。因此,在最后的Ember版本中,您应该使用Controller类而不是ObjectController,它不能用作model的代理。您可以将其视为Ember对象,其中model属性来自相应的路径。所以{{name}}表示Controller的属性,{{model.name}} - 模型的属性。

例如:

//route
model: function () {
  return {name: "Joe"};
}

 //controller
 import Ember from 'ember';
 export default Ember.Controller.extend({
   name: 'Marry'
 });

//template
{{name}} //=> Marry
{{model.name}} //=> Joe

答案 1 :(得分:0)

我认为这可能是关于显性的问题,但我并非100%确定 - 您还可以将数据发送到除model以外的属性上的模板,因此它可能是允许的更容易理解 - model无论如何都是一个不好的财产名称IMO

如果语法过于冗长,您可以使用with帮助程序:

{{#with story}}
    <div class="intro">{{{intro}}}</div>
    <div class="body">{{{body}}}</div>
{{/with}}