我准备了一个小提琴来更好地揭露问题。
代码:
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>
我在这里做错了什么?
答案 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.ObjectController
,Ember.ArrayController
只是代理,因此会将这些属性委托给其内容(see ObjectProxy source code)。
所以你必须写{{view.content.name}}
,因为你需要name
的{{1}}属性。
正如@tomdale所说in this gist comment:
在项目视图的模板中,
view.content
应该引用项目视图, 并且view
应该引用内容数组中的项目。
你可以看到带有控制器的JSFiddle,而没有指定view.content
:JSFiddle