Ember.js的Hello World:这里有什么问题?

时间:2012-08-30 09:16:20

标签: ember.js

我准备了一个小提琴来更好地揭露问题。

http://jsfiddle.net/Xbxwr/

代码:

App = Ember.Application.create();

App.MyView = Ember.View.extend({ templateName: "MyView" });

App.myCollectionView = Ember.CollectionView.create({
    itemViewClass: App.MyView,
    content: [
        Ember.Object.create({ name: "World" }),
        Ember.Object.create({ name: "Foo" }),
        Ember.Object.create({ name: "Bar" })
    ]
});

$(function() { App.initialize(); });

查看:

<script type="text/x-handlebars">
   {{collection App.myCollectionView}}
</script>

<script type="text/x-handlebars" data-template-name="MyView">
  <h1>Hello, {{name}}!</h1>
</script>​

我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

首先,{{collection}}帮助程序需要Ember.View类而不是Ember.View实例。您必须将Ember.CollectionView.create()替换为Ember.CollectionView.extend

接下来,在您的模板中,您必须根据View context changes{{name}}替换为{{view.content.name}}

这是您更新的JSFiddle:http://jsfiddle.net/AzV4f/

修改

{{name}}表示context.name,其中上下文通常是控制器(see source code)。由于Ember.ObjectControllerEmber.ArrayController只是代理,因此会将这些属性委托给其内容(see ObjectProxy source code)。

所以你必须写{{view.content.name}},因为你需要name的{​​{1}}属性。

正如@tomdale所说in this gist comment

  

在项目视图的模板中,view.content应该引用项目视图,   并且view应该引用内容数组中的项目。

你可以看到带有控制器的JSFiddle,而没有指定view.contentJSFiddle