觀察變化的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