我正在关注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
我在这里做错了什么?
答案 0 :(得分:1)
根据turboMaCk's comment,从package.json中删除ember-disable-proxy-controllers似乎解决了这个问题。
答案 1 :(得分:0)
This issue was just reported yesterday。这似乎是Ember的一个错误,我不知道一个解决方法。但是,它确实提到您可以使用组件而不是数组和项目控制器(无论如何这是首选方法)。也许可以尝试查看问题中发布的this gist。
如果找到解决方法/修复程序,我会回来更新此答案。现在,我想尽量避免使用数组控制器(即使它在教程中)。 :/