我努力让我的模型的数据库数据呈现给我的模板,当我在模板中尝试每个循环时,我收到上面的错误:
{{#each}}
{{title}}
{{/each}}
我已经设置了我的路由器:
Application.Router.map(function() {
this.resource('application', { path: '/' });
});
Application.ApplicationRoute = Ember.Route.extend({
model: function() {
return this.store.find('applicationmodel');
}
});
我的模型设置如下:
Application.ApplicationModel = DS.Model.extend({
title: DS.attr('string')
});
Application.ApplicationModel.FIXTURES = [
{
id: 1,
title: 'title-1'
},
{
id: 2,
title: 'title-2'
}
];
谁能告诉我我做错了什么?
由于
答案 0 :(得分:6)
试试这个:
{{#each content}}
{{title}}
{{/each}}
和
App.ApplicationController = Ember.ArrayController.extend({})
Application.ApplicationRoute = Ember.Route.extend({
model: function() {
return this.store.find('applicationModel');
},
setupController: function(controller, model) {
controller.set('content', model);
}
});
编辑:根据@Andy Hayden在评论中的要求详细说明:
错误(EmberJS - Assertion failed: The value that #each loops over must be an Array. You passed (generated application controller)
)为我们提供了两条线索:
无论我们想要遍历什么,都不是数组。从模板中我们可以看到我们循环遍历控制器的content
属性。因此,看起来我们没有ArrayController
设置,我们正在处理ObjectController
。您可以使用Ember Inspector
控制器来自哪里?如果需要的话,Ember会auto generate控制器给我们,我们没有明确定义它。事实上,通过查看错误消息(generated application controller
),我们可以看到发生了什么。 Ember不知道我们是想要表示单个对象还是数组,因此它为我们生成了ObjectController
。如果我们明确定义ApplicationController
类型ArrayController
,Ember将使用我们的控制器而不是自己生成一个。
答案 1 :(得分:0)
Application.Router.map(function() {
this.resource('application', { path: '/' });
});
Application.ApplicationRoute = Ember.Route.extend({
model: function() {
return this.store.find('application');
}
});
我的模型设置如下:
Application.Application = DS.Model.extend({
title: DS.attr('string')
});
Application.Application.FIXTURES = [
{
id: 1,
title: 'title-1'
},
{
id: 2,
title: 'title-2'
}
];
尝试进行上述更改。具体来说,删除'模型'从名称中确保在FIXTURES之前没有空格。
{{#each app in model}}
{{app.title}}
{{/each}}
然后使用model
,因为它是您正在迭代的模型属性。
答案 2 :(得分:0)
您收到此错误是因为模板循环的控制器无法枚举 - Ember会自动为您生成ApplicationController
,因为您没有明确定义一个。
只需声明ApplicationController
,如下所示:
App.ApplicationController = Ember.ArrayController.extend()
答案 3 :(得分:0)
你找到了答案吗?你在使用Ember AppKit吗?如果是这样,我只是遇到了这个问题(这就是我最终的结果)并最终成为一个文件命名的东西。
例如,在我们的其他(非EAK)Ember应用中,我通常会将PostsController
放在名为posts_controller.js
的文件中。 EAK似乎不喜欢这样;它希望你把它放在posts.js
中,如果找不到它,它就不会返回一个ArrayController,所以模板没有任何东西可以{{#each}}
结束。
在我们(不同的)EAK应用程序中,我的同事和我都被这个问题所困扰。我们通过注意到控制台日志记录报告生成的控制器时跟踪它,当我们预计它将加载我们指定的控制器时。
答案 4 :(得分:0)
如果其他答案都没有帮助,您可能会错误输入模板名称或handlebars
脚本标记的属性。
检查您的index.html
并确保<script>
代码具有此属性data-template-name="application"
应该是这样的:
<script type="text/x-handlebars" data-template-name="application">