gpt4 book ai didi

ember.js - Ember 数据 : Two models related with hasMany relationships

转载 作者:行者123 更新时间:2023-12-04 21:53:23 24 4
gpt4 key购买 nike

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

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

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

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

  • 提前致谢

    最佳答案

    ember-data 尚不支持多对多关系。目前,一种可能的解决方法是手动管理连接表。

    A = DS.Model.extend({
    abs: DS.hasMany('Ab'),

    bs: function () {
    return this.get('abs').getEach('b');
    }
    });

    Ab = DS.Model.extend({
    a: DS.belongsTo('A'),
    b: DS.belongsTo('b')
    });

    B = DS.Model.extend({
    abs: DS.hasMany('Ab'),

    bs: function () {
    return this.get('abs').getEach('a');
    }
    });

    这只是起点。然后,您需要自定义模型和适配器,以便以工作方式发送/接收/保留记录

    例如,在我们的应用程序中,我们引入了一个 { includedJoin: true } hasMany 关系中的选项,并将连接表声明为 JoinModel
    A = DS.Model.extend({
    abs: DS.hasMany('Ab', {includeJoin: true}),
    ...
    });

    DS.JoinModel = DS.Model.extend();

    Ab = DS.JoinModel.extend({
    ... belongsTo relationships ...
    });

    然后在 Adapter 中,我们重写 create/update/delete 方法以忽略存储中的连接表生命周期
    createRecords: function (store, type, records) {
    if (!DS.JoinModel.detect(type)) {
    this._super(store, type, records);
    }
    }

    最后,在序列化程序中,我们覆盖了 addHasMany函数以便将连接数据作为父模型中的嵌入 id 发送到服务器。
    addHasMany: function (hash, record, key, relationship) {
    var
    options = relationship.options,
    children = [];

    //we only add join models, use of `includeJoin`
    if (options.includedJoin) {
    record.get(relationship.key).forEach(function (child) {
    children.pushObject(child.toJSON({
    includeId: true
    }));
    });
    hash[key] = children;
    }
    }

    在服务器端,我们将 Rails 与 ActiveModelSerializer 一起使用,因此唯一有点棘手的定制是当我们更新父模型时,我们手动管理连接关系,并在连接表中创建/删除条目。

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

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com