我的ember.js应用程序中有一些相关的模型(使用Ember 1.0和EmberData 1.0 RC2):
App.List = DS.Model.extend({
listName : DS.attr( ),
cards : DS.hasMany( 'card', { async : true } )
});
和
App.Card = DS.Model.extend({
description : DS.attr( ),
list : DS.belongsTo( 'list' )
});
我正在使用以下代码来保存模型并将它们添加到hasMany关系中。
createCard : function(){
var list = this.get( 'model' ),
card ;
card = this.store.createRecord( 'card', {
description : this.get( 'cardDescription' ),
list : list
} );
card.save().then( function(){
var cards = list.get( 'cards' );
cards.then( function(){
cards.pushObject( card );
list.save();
} );
} );
this.set( 'cardDescription', '' );
}
保存hasMany集合的父级时,我遇到了间歇性问题。有时卡片会被正确地添加到列表集合中(列表中有一个卡片ID列表),有时候卡片会被错误添加(列表中有一个卡片对象数组),有时这些关系会一起丢失(列表中没有一系列卡片)。
这些症状让我认为它是一个异步问题,或者我在保存对象时错误地使用了promises。
答案 0 :(得分:3)
这看起来与我使用here几乎相同。我能看到的唯一区别是我一步将孩子模型推到了父母身上(我怀疑它有所不同)并且还有评论(我猜这是你的情况下的卡片)作为内部承诺的主题“那么”的功能,也许会有所不同?
var post = this.get('controllers.post.content');
var comment = this.get('store').createRecord('comment', { post: post, text: this.get('text') });
comment.save().then(function(comment){
post.get('comments').pushObject(comment);
});
答案 1 :(得分:2)
对于当前最新的EmberData 1.0.0-beta.4+canary.3993001d
,我只在创建模式的didCreate钩子中为它所绑定的每个关系创建了这个。到目前为止工作......
App.Book = DS.Model.extend({
...
didCreate: function() {
var self = this;
Em.RSVP.resolve(this.get('author')).then(function(author){
author.get('books').pushObject(self);
});
Em.RSVP.resolve(this.get('category')).then(function(category){
category.get('books').pushObject(self);
});
},
...
});