【问题标题】:Proper way to save to a hasMany relationship using ember data使用 ember 数据保存到 hasMany 关系的正确方法
【发布时间】:2013-09-18 20:52:58
【问题描述】:

我的 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。

【问题讨论】:

    标签: ember.js ember-data


    【解决方案1】:

    这看起来与我使用的here 几乎相同。我能看到的唯一区别是我一步将子模型推给了父模型(我怀疑这会有所不同)并且还有评论(我猜是你的情况下的卡片)作为内部承诺的主题'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);
    });
    

    【讨论】:

      【解决方案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);
          });
        },
        ...
      });
      

      【讨论】:

      • 是的,我们正在考虑调查 EPF epf.io 作为 ember 数据的替代方案。这可能允许更自然的数据同步和关系。
      猜你喜欢
      • 2015-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多