观察变化的ItemController我一直在EmberCli重新创建TodoMVC学习余烬。我重新创建了所有的功能,但是我遇到了一个问题,我希望有人能够对这种情况有所了解。在阵列控制器
看来,我的托多斯ArrayController将观察和消防功能,当在我的模型的变化属性,但不是当我的待办事项ObjectController变化值。
我搬到isEditing模型,以便当我打电话editTodo
canToggle
火灾。但我宁愿将该值存储在我的控制器中,而不是模型中。
我建立了一个测试用一个propTest布尔值。点击一个按钮我火propToggle
但todoPropToggle
未对变化做出反应。它唯一启动的时间是初始化。
任何洞察将是超级有用。
TODOS控制器
import Ember from 'ember';
export default Ember.ArrayController.extend({
actions: {
createTodo: function() {
var title = this.get('newTitle');
if (!title.trim()) {
return;
}
var todo = this.store.createRecord('todo', {
title: title,
isCompleted: false,
isEditing:false
});
this.set('newTitle', '');
todo.save();
}
},
canToggle: function() {
var isEditing = this.isAny('isEditing');
return this.get('length') && !isEditing;
}.property('length','@each.isEditing'),
todoPropToggle: function() {
var hasPropTest = this.isAny('propTest');
return hasPropTest;
}.property('@each.propTest')
});
TODO控制器
import Ember from 'ember';
export default Ember.ObjectController.extend({
actions: {
editTodo: function() {
var todo = this.get('model');
todo.set('isEditing', true);
},
removeTodo: function() {
var todo = this.get('model');
todo.deleteRecord();
todo.save();
},
acceptChanges: function() {
var todo = this.get('model');
todo.set('isEditing', false);
if (Ember.isEmpty(this.get('model.title'))) {
this.send('removeTodo');
}
else {
this.get('model').save();
}
},
propToggle:function(){
this.set('propTest',!this.get('propTest'));
}
},
propTest:true,
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.isCompleted')
});
这似乎工作,但这是真的结束了我想做的事情。这真的是这种功能的最佳做法吗?根据TodoMVC示例中的代码,我期待更清晰的方式。 – Caranicas 2014-09-10 21:30:28
我想另一个可能更好的解决方案是基于路线的解决方案。所以在你的todo路径中,使用activate和deactivate钩子来设置todos控制器中的canToggle属性。 – 2014-09-10 22:16:35
这是否意味着无法从数组控制器中观察对象控制器属性? – Caranicas 2014-09-10 22:18:47