1

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

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

我在这里做错了什么?

4

1 回答 1

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,其中上下文通常是控制器(见源代码)。由于Ember.ObjectController,Ember.ArrayController只是代理,这些属性被委托给它们的内容(参见 ObjectProxy 源代码)。

所以你要写{{view.content.name}},因为你要的name属性view.content

正如@tomdale在此要点评论中所说:

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

您可以看到带有控制器的 JSFiddle,而无需指定viewJSFiddle

于 2012-08-30T09:40:31.613 回答