使用ember数据保存到hasMany关系的正确方法

bit*_*yan 15 ember.js ember-data

我的ember.js应用程序中有一些相关的模型(使用Ember 1.0和EmberData 1.0 RC2):

App.List = DS.Model.extend({
    listName : DS.attr( ),
    cards : DS.hasMany( 'card', { async : true } )
});
Run Code Online (Sandbox Code Playgroud)

App.Card  = DS.Model.extend({
    description : DS.attr(  ),
    list : DS.belongsTo( 'list' )
});
Run Code Online (Sandbox Code Playgroud)

我正在使用以下代码来保存模型并将它们添加到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', '' );
}
Run Code Online (Sandbox Code Playgroud)

保存hasMany集合的父级时,我遇到了间歇性问题.有时卡片会被正确地添加到列表集合中(列表中有一个卡片ID列表),有时候卡片会被错误添加(列表中有一个卡片对象数组),有时这些关系会一起丢失(列表中没有一系列卡片).

这些症状让我认为它是一个异步问题,或者我在保存对象时错误地使用了promises.

小智 3

这看起来与我在这里使用的几乎相同。我能看到的唯一区别是,我一步将子模型推送到父模型(我怀疑这会产生影响),并且还将注释(我猜是您案例中的卡片)作为内部承诺的主题“then”功能,也许会有所不同?

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);
});
Run Code Online (Sandbox Code Playgroud)