当尝试将新创建的对象推送到具有多个关系的父级时,我运行错误:
Assertion failed: The content property of DS.PromiseArray should be set before modifying it
这是我的代码。
App.User = DS.Model.extend({
name : DS.attr('string'),
selections : DS.hasMany('selection', {async: true}),
creationDate : DS.attr('date')
});
App.Selection = DS.Model.extend({
value : DS.attr('string')
});
App.PollController = Ember.ObjectController.extend({
actions: {
save: function(){
// create new user record in store
var newUser = this.store.createRecord('user', {
name : this.get('newUserName'),
creationDate : new Date()
});
// create new selection record in store
var newSelection = this.store.createRecord('selection', {
id : 11,
value : "hallo"
});
// push selection to user
newUser.get('selections').pushObject(newSelection);
// save new user
newUser.save();
}
}
});
当我尝试将newSelection对象推送到选择用户模型数组时出错。
还尝试将行更改为
// push selection to user
newUser.get('selections').then(function(selections){
selections.pushObject(newSelection);
});
然后我没有收到错误,但是newSelection没有被推送给用户。选择用户数组保持为空。
我做错了什么?我完全错了吗?或者EmberJs / Ember数据中有错误吗?
我正在使用EmberJS 1.2.0和Ember Data beta 5。
答案 0 :(得分:8)
我假设您说保存没有发回选择,导致您的添加代码是正确的。
重要的是要注意承诺是异步发生的
newUser.get('selections').then(function(selections){
// this will happen after save
selections.pushObject(newSelection);
});
newUser.save();
您应该等待保存,直到推送选择
http://emberjs.jsbin.com/gotasa/1/edit?html,js,output
newUser.get('selections').then(function(selections){
selections.pushObject(newSelection);
newUser.save();
});