EmberJS - 断言失败:#each循环的值必须是一个数组。你通过了(生成的应用控制器)

时间:2014-03-19 23:28:29

标签: javascript ember.js ember-data

我努力让我的模型的数据库数据呈现给我的模板,当我在模板中尝试每个循环时,我收到上面的错误:

{{#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'
    }
];

谁能告诉我我做错了什么?

由于

5 个答案:

答案 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))为我们提供了两条线索:

  1. 无论我们想要遍历什么,都不是数组。从模板中我们可以看到我们循环遍历控制器的content属性。因此,看起来我们没有ArrayController设置,我们正在处理ObjectController。您可以使用Ember Inspector

  2. 进行确认
  3. 控制器来自哪里?如果需要的话,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">