断言失败:#each循环的值必须是Array错误。我究竟做错了什么?

时间:2015-05-24 15:14:00

标签: javascript arrays ember.js todomvc

我正在关注Ember的TodoMVC教程,我被困住了。基本上,我定义了2个控制器。这是todos.js

import Ember from "ember";

export default Ember.ArrayController.extend({
    actions:{
        createTodo: function(){
            var title = this.get("newTitle");

            if(!title){
                return false;
            }
            if(!title.trim()){
                return;
            }

            var todo = this.store.createRecord("todo", {
                title: title,
                isCompleted: false
            });

            // Clear text field
            this.set('newTitle', '');

            todo.save();
        }
    }
})

这是todo.js

import Ember from "ember"

export default Ember.ObjectController.extend({
    isCompleted: function(key, value){
        var model = this.get("model");

        if(value === undefined){
            return model.get("isCompleted");
        } else {
            model.set('isCompleted', value);
            model.save();
            return value;
        }
    }.property('model','model.isCompleted')
});

这是routes / todos.js

import Ember from "ember";

export default Ember.Route.extend({
    model: function() {
        return this.store.find("todo");
    }
});

最后,还定义了todos.hbs

<ul id="todo-list">
    {{#each todo in model itemController="todo"}}
        <li {{bind-attr class="todo.isCompleted:completed"}}>
            {{input 
            type="checkbox"
            class="toggle"
            checked=todo.isCompleted
            }}
            <label>{{todo.title}}</label><button class="destroy"></button>
        </li>
    {{/each}}
</ul>

一切看起来都不错,但我在控制台中收到以下错误:

  

未捕获错误:断言失败:#each循环的值必须   是一个数组。你通过了todomvc-embercli @ controller:array:,但是它   应该是一个ArrayController

我在这里做错了什么?

2 个答案:

答案 0 :(得分:1)

根据turboMaCk's comment,从package.json中删除ember-disable-proxy-controllers似乎解决了这个问题。

答案 1 :(得分:0)

在Ember GitHub页面上

This issue was just reported yesterday。这似乎是Ember的一个错误,我不知道一个解决方法。但是,它确实提到您可以使用组件而不是数组和项目控制器(无论如何这是首选方法)。也许可以尝试查看问题中发布的this gist

如果找到解决方法/修复程序,我会回来更新此答案。现在,我想尽量避免使用数组控制器(即使它在教程中)。 :/