Mirage 的简单 Ember 数据问题(错误:遇到未定义类型的资源对象)
Posted
技术标签:
【中文标题】Mirage 的简单 Ember 数据问题(错误:遇到未定义类型的资源对象)【英文标题】:Simple Ember Data Issue with Mirage (Error: Encountered a resource object with an undefined type ) 【发布时间】:2018-10-30 16:46:08 【问题描述】:我对 Ember.js 有一些经验,现在正在创建一个新项目,使用 Mirage 暂时存根数据。
我正在逐步检查Ember.js Tutorial,但在查询记录时不断收到此错误:
Encountered a resource object with an undefined type (resolved resource using DS.JSONAPISerializer)
我确实意识到有人问过similar question,但它不包括 Mirage 插件,而且我还研究了该问题中回答的所有技术。
mirage/config.js
export default function()
this.namespace = '/api'
this.get('/todos', function()
return
data: [
text: 'Bring in garbage cans',
completed: false,
timesViewed: 3
,
text: 'Look at the plants',
completed: false,
timesViewed: 0
]
)
app/models/todo.js
import DS from 'ember-data';
export default DS.Model.extend(
text: DS.attr(),
completed: DS.attr(),
timesViewed: DS.attr()
);
app/routes/index.js
import Route from '@ember/routing/route';
export default Route.extend(
model()
return this.store.findAll('todo')
);
app/adapters/application.js
import DS from 'ember-data';
export default DS.JSONAPIAdapter.extend(
namespace: 'api'
);
我一直在以各种方式格式化来自 Mirage 的响应,甚至在键上加上双引号,但这不应该是必要的,因为我相信 mirage 会序列化它。
对我在这里缺少的任何帮助表示感谢。
【问题讨论】:
【参考方案1】:我认为您面临的问题是由于您的 mirage 数据未按照 JSON-API 规范进行格式化。
mirage/config.js
=>
export default function()
this.namespace = '/api'
this.get('/todos', function()
return
data: [
type: "todos",
id: 1,
attributes:
text: "Bring in garbage cans",
completed: false,
timesViewed: 3
,
type: "todos",
id: 2,
attributes:
text: "Look at the plants",
completed: false,
timesViewed: 0
]
);
试用此代码,看看问题是否已解决。
如果您正在寻找一种根据 JSON-API 规范动态生成海市蜃楼数据的方法,请参阅此示例代码 -> sample code for dynamic mirage data!干杯?
【讨论】:
我不明白为什么需要您的动态海市蜃楼数据示例代码。 Mirage 支持工厂,允许使用场景播种数据库,并且具有类似这样的简单路线的简写。 @jelhan 你说得对,工厂支持这一点,如果你正在寻找快速的东西,这只是一个手动实现。 我认为使用 mirage 的默认设置会更快,代码更少。以上是关于Mirage 的简单 Ember 数据问题(错误:遇到未定义类型的资源对象)的主要内容,如果未能解决你的问题,请参考以下文章
Ember cli mirage 错误:补丁处理程序无法读取 null 的属性更新
Ember Mirage 没有将模型作为 ember 对象传递