繁体   English   中英

Ember CLI Mirage:2级侧载响应

[英]Ember CLI Mirage: 2 level sideloaded response

我在建模这种关系时遇到了一些困难。 有人可以帮忙吗?

租户有一个应用程序

应用具有品牌

最大的难题是侧面加载有2个级别。 我当前的API返回如下响应:

{
  "tenants": [
      {
        "app_id": "app_001",
        "id": 1,
        "name": "Illya_no_delete",
      }
    ],
  "app": [
    {
      "brand_id": "brand_001",
      "id": "app_001",
      "name": "updated test client 2 name",
    }
  ],
  "brands": [
    {
      "id": "brand_001",
      "app_id": "app_001"
    }
  ]
}

我将模型设置为:

// models/tenant.js
export default Model.extend({
  app: belongsTo('app'),
});


// mirage/models/app.js
export default Model.extend({
  brand: belongsTo('brand'),
  tenant: belongsTo('tenant')
});

// mirage/models/brand.js
export default Model.extend({
  app: belongsTo('app')
});

我将序列化器设置为:

// mirage/serializers/app.js
export default ApplicationSerializer.extend({
  include: ['brand']
});

// mirage/serializers/tenant.js
export default ApplicationSerializer.extend({
  include: ['app']
});

我将场景设置为:

// mirage/scenarios/default.js
let brand = server.create('brand');
let app = server.create('app', {brand: brand});
server.createList('tenant', 10, {app: app});

不幸的是,我生成的响应未返回侧面加载的品牌对象。 我看到了所有其他对象:

{
  tenant: {
    id: 1,
    app_id: 2
  },
  apps: [
    {
      id: 2,
      brand_id: null,
      tenant_id: 1
    }
  ]
}

关于我需要做些什么来获得“品牌”的任何建议?

对于任何有兴趣的人,以下是根据Sam Selikoff的评论为我工作的解决方案。 公开反馈:

楷模:

// models/tenant.js
export default Model.extend({
  app: belongsTo('app'),
  brand: belongsTo('brand'),
});

// mirage/models/app.js
export default Model.extend({
  tenant: belongsTo('tenant')
});

// mirage/models/brand.js
export default Model.extend({

});

序列化器:

// mirage/serializers/tenant.js
export default ApplicationSerializer.extend({
  include: ['app', 'brand'],

  serialize() {
    let json = ApplicationSerializer.prototype.serialize.apply(this, arguments);
    if (json.brands.length > 0) {
      let brandId = json.brands[0].id;
      json.applications[0].brand_id = brandId;
    }
    return json;
  }
});

默认方案:

// mirage/scenarios/default.js
let brand = server.create('brand');
let app = server.create('app');
server.createList('tenant', 10, {app: app, brand: brand});

响应:

{
  tenant: {
    id: 1,
    app_id: 2
  },
  apps: [
    {
      id: 2,
      brand_id: 3,
      tenant_id: 1
    }
  ],
  brand: [
    {
      id: 3
    }
  ]
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM