我有一个应用程序,可以保留多个任务列表。每个任务列表都有多个任务。每个任务都有多个注释。
更新到新的Ember数据后,我不得不废弃我的记录创建代码。目前我有这个,这是行不通的。虽然它没有抛出任何错误,但我的模型似乎没有更新。
App.TaskController = Ember.ArrayController.extend({
needs : ['list'],
isEditing : false,
actions : {
addTask : function(){
var foo = this.store.createRecord('task', {
description : '',
list : this.get('content.id'),
comments : []
});
foo.save();
console.log('Task Created!');
},
edit : function(){
this.set('isEditing', true);
},
doneEditing : function(){
this.set('isEditing', false);
}
}
});
有人知道如何在此上下文中创建新任务(以及如何创建新评论)?
请参阅此处的小提琴:http://jsfiddle.net/edchao/W6QWj/
答案 0 :(得分:2)
是的,你需要在列表控制器中使用pushObject。
我会像这样做addTask,现在几乎ember数据中的每个方法都返回一个promise
App.TaskController = Ember.ArrayController.extend({
needs : ['list'],
listController:Ember.computed.alias('controllers.list'),
isEditing : false,
actions : {
addTask : function(){
var listId = this.get('listController.model.id'),
list = this,
store = this.get('store');
console.log('listId',listId);
store.find('task').then(function(tasks){
var newId = tasks.get('lastObject.id') + 1,
newTask = store.createRecord('task', {
id:newId,
description : '',
list : listId,
comments : []
});
newTask.save().then(function(newTaskSaved){
list.pushObject(newTaskSaved);
console.log('Task Created!');
});
});
},
edit : function(){
this.set('isEditing', true);
},
doneEditing : function(){
this.set('isEditing', false);
}
}
});
我认为正确地看待id是非常重要的,这里有一个我使用find的固定装置,但是其余的适配器将是后端分配id并在响应中设置它
JSFiddle http://jsfiddle.net/W6QWj/2/
答案 1 :(得分:1)
好的,所以我回答了我自己的问题。我错过了pushObject()方法。这是另一种做事的方式。虽然我不确定这是否是最好的做法,因为它确实抛出错误“断言失败:你只能在这段关系中添加'列表'记录”
App.ListController = Ember.ObjectController.extend({
actions:{
addTask : function(){
var foo = this.store.createRecord('task', {
description : '',
list : this.get('content.id'),
comments : []
});
this.get('tasks').pushObject(foo);
foo.save();
}
}
});