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

标签 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 } )
});


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 数组),有时卡片被错误添加(列表有一个卡片对象数组),有时关系一起丢失(列表不包含卡片阵列)。

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

最佳答案

这看起来和我用过的几乎一样 here .我能看到的唯一区别是,我一步将子模型推送给父模型(我怀疑这会有所不同),并且还将评论(我猜是您的情况下的卡片)作为内部 promise 的主题'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);
});

关于ember.js - 使用 ember 数据保存到 hasMany 关系的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18882154/

相关文章:

javascript - 使用each-in循环后无法操作输入ember中的对象模型

ember.js - 对模型 Mixin 进行单元测试

javascript - 如何在 ember 中创建枚举服务

javascript - 在 ember.js 中保存对象时出错 : 'Object X has no method ' save''

css - 如何在 Ember 中使用 css 动画

ember.js - Ember 从模型中的 Controller 获取属性

jquery - Ember.js 1.2.0 debounce 在 jquery 事件上无法按预期工作

javascript - Ember.js 观察者

javascript - 我怎样才能给 Ember 数据模型一个 TTL 并在它过期后重新加载它?

ajax - Ember 数据 : how can I delete/unload a record that's stuck in the "inFlight" state?