我有一个应用程序逻辑,它需要两个模型具有相互的 hasMany 关系。例如,想象一组可以用多个标签标记的 GitHub 问题。

我正在尝试使用扩展默认 RESTAdapter 的适配器。所有应用程序工作正常,但双重 hasMany 关系引发异常。深入研究代码,inverseBelongsToForHasMany 方法会引发异常。

所以,我猜 Ember.Data 不支持两个模型的关联,双方都有 hasMany 关系,每个 hasMany 都需要一个关联的belongsTo。我的问题是:

  • 这是否受支持,问题只是我做错了什么?
  • 如果不支持,是计划出现的功能吗?
  • 这是这类应用中要避免的关联类型吗?如果是这样,最好的方法或解决方法是什么?

  • 提前致谢

    最佳答案

    我们使用类似的方法创建关联对象。然而,我们没有覆盖 store 中的方法,而是将 join 对象添加到 api 中。

    所以在我们创建的模型中:

    App.Hashtag = DS.Model.extend({
      hashtagUsers: DS.hasMany('App.HashtagUser', {key: 'hashtag_user_ids'})
    });
    
    App.User = DS.Model.extend({
      hashtagUsers: DS.hasMany('App.HashtagUser', {key: 'hashtag_user_ids'})
    });
    
    App.HashtagUser = DS.Model.extend({
      user: DS.belongsTo('App.User'),
      hashtag: DS.belongsTo('App.Hashtag')
    });
    

    然后对于事务,我们只需更改并提交连接对象。
    App.UserController = Ember.ObjectController.extend({
      followHashtag: function(tag) {
        var hashtagUser;
        hashtagUser = this.get('hashtagUsers').createRecord({
          hashtag: tag
        });
        tag.get('hashtagUsers').pushObject(hashtagUser);
        App.store.commit();
      }
      unfollowHashtag: function(tag) {
        var itemToRemove;
        itemToRemove = this.get('hashtagUsers').find(function(hashtagUser) {
          if (hashtagUser.get('hashtag') === this) {
            return true;
          }
        }, tag);
        this.get('hashtagUser').removeObject(itemToRemove);
        tag.get('hashtagUser').removeObject(itemToRemove);
        itemToRemove.deleteRecord();
        App.store.commit();
    

    });

    API 创建了一个 HashtagUser 对象,follow 方法只是将该用户添加到两个相关联的部分。

    对于删除,它弹出关联对象并销毁关联对象。

    尽管它不如它应有的优雅,但我们的主要动机是,当 Ember Data 更新时,我们应该能够将其转换为简单的 Ember Data 支持的简单版本,而不是我们弄乱 Store 本身。

    关于ember.js - EmberData : Two models related with hasMany relationships,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13299924/

    10-12 13:49