如何处理EmberJS客户端中的many2many对象?

时间:2015-08-10 15:19:25

标签: ember.js many-to-many

我有一个拥有多对多重要资源的数据模型。我们假设我有一个Producer模型和一个Customer模块。客户可以从任意数量的生产商处购买,而产品可以为任意数量的客户提供服务。

在后端,我有三个表的标准关系配置:

  • 客户
  • 生产者
  • customer2producer

我的Ember模特目前看起来像这样:

// models/producer.js
import DS from 'ember-data';

export default DS.Model.extend({
  customers: DS.hasMany('module'),
});

// models/customer.js
import DS from 'ember-data';

export default DS.Model.extend({
  producers: DS.hasMany('module'),
});

现在我正在使用灯具,而我所做的只是使用" target"的ID来定义customersproducers数组。问题是,我迟早会切换到真正的REST后端,这意味着我必须处理模型不匹配问题。我想我必须选择:

我想这是一种非常常见的情况,我想知道解决问题的最简洁方法是什么。提前谢谢。

1 个答案:

答案 0 :(得分:1)

您的数据库不需要映射到REST API。特别是你没有平面数据的限制(这些天你也没有在某些数据库中)。

如果您控制了后端API,我只会返回如下响应:

GET / customers

{
  customers: [
    {id: 1, producers: [1, 2]},
    {id: 2, producers: []},
  ]
}

GET / producer

{
  producers: [
    {id: 1, customers: [1]},
    {id: 2, customers: [1]}
  ]
}

您的REST后端应该是关注序列化和反序列化到数据库模型而不是前端应用程序的后端。

如果您有任何消费API无法立即修改(移动应用程序,第三方等),那么无论如何,您的REST API自然会与您的后端模型脱节,从而为您提供数据转换工作。所以我真的想强迫你做一些对REST有意义的事情。