【问题标题】:Ember + Mirage and relationshipsEmber + Mirage 和关系
【发布时间】:2016-06-25 15:57:32
【问题描述】:

我正在使用 Ember 2.6,目前正在将 Mirage 用于客户端托管的静态数据库。

我开始使用提供示例数据的固定装置,但我无法使关系发挥作用。

我有 2 个实体:island 和 spot,具有多对一关系

//mirage/models/spot.js
import { Model, belongsTo } from 'ember-cli-mirage';   
export default Model.extend({
  island: belongsTo()
});

//mirage/models/island.js
import { Model, hasMany } from 'ember-cli-mirage';
export default Model.extend({
  spots: hasMany()
});

还有我的灯具数据

//mirage/fixture/spots.js
export default [
  {id: '1', name: 'test spot', island_id: [1]},
}

//mirage/fixture/islands.js
export default [
  {id: '1', name: 'Island 1 Name', permit: null, spot_ids: [1]},
}

我的 config.js 只是一个简单的 getAll

  this.get('/islands', function(schema, request){
    return schema.islands.all();
  });

但当我调用它时,我得到了我的岛屿,但缺少关系。

使用默认的 json api 适配器。

如何让 Mirage 返回具有给定关系的 json 数据? 我试图同时在两边和2中设置关系,但都不提供子实体。

这是我在 github 上的项目的链接: https://github.com/drallieiv/StreetpassTips/tree/feature/showRealDataForIslands/mirage

【问题讨论】:

    标签: ember.js


    【解决方案1】:

    尝试在夹具文件中的关系属性之间不使用下划线。

    例如:

    //mirage/fixture/spots.js
    export default [
      {id: '1', name: 'test spot', islandId: 1},
    }
    

    同样在模型中你必须给 hasMany 和 belongsTo 一个模型 喜欢hasMany('spot')belongsTo('island')

    【讨论】:

    • 我查看了 JSON API 规范 (jsonapi.org/format/#document-resource-object-linkage) 对岛的 GET 不应该返回包含的元素吗?有了我得到的,我收到了这个解析的 json(chrome 调试器)!screenshot
    • 对 island 的调用返回的内容看起来很正常,但我希望将点嵌入结果中,或者我的 ember 应用程序为每个链接结果调用 GET /spots/:id。
    • 已编辑以删除答案中 islandId 值周围的数组括号。这很重要。
    • @AdrienNGUYEN 在您的问题中,您能否包含调用 API 的应用程序部分?它是否请求通过 URL include 参数包含 spots 记录? jsonapi.org/format/#fetching-includes
    • 我不能,这是 ember 数据正在调用。我不知道如何告诉它这样做与否。我在 ember slack 上得到了一些答案,我正在考虑放弃伪装者和 ember-data 并使用 ES6 模块中的 pojos。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-03
    相关资源
    最近更新 更多