我正在为使用EmberJS编写的应用程序编写测试。我正在使用幻影。 我有以下两种模式:
蜃/模型/ paperwork.js
export default Model.extend({
customer: belongsTo('customer'),
paperwork_products: hasMany('paperwork-product', { inverse: 'paperwork' }),
蜃/模型/文书工作-product.js
export default Model.extend({
paperwork: belongsTo('paperwork', { inverse: 'paperwork_products' }),
});
在我的场景中,我正在创建这样的数据:
const paperwork = server.create('paperwork');
const paperworkProduct = server.create('paperwork-product', { paperwork });
paperwork.paperwork_products.add(paperworkProduct);
我的路线:
export default ApplicationRoute.extend({
model(params) {
return this.store.findRecord('paperwork', params.paperwork_id, { include: 'paperwork_products' }),
},
});
问题是我无法在模板中访问paperwork.paperwork_products。这是未定义的(其他文书工作属性在这里,但不是关系)。当声明路由时,我甚至已经尝试在我的mirage / config.js中放置一个调试器。我的文书工作存在,他的“文书工作产品”也存在。但我无法在模板中获取paperwork_products数据。 我究竟做错了什么 ?我想我必须改变一些事情:
this.get('v1/paperworks/:id');
但我不知道是什么...... 提前谢谢!
编辑:这是我真正的Ember模特:
模型/ paperwork.js
export default DS.Model.extend({
customer: DS.belongsTo('customer'),
paperwork_products: DS.hasMany('paperwork-product', { async: true }),
});
模型/文书工作-product.js
export default DS.Model.extend({
paperwork: DS.belongsTo('paperwork'),
});
昨天我试图比较我背后的真实JsonApi响应和Mirage响应,我看到在关系哈希中,我的关系“paperwork_products”被改为文书产品(使用幻影)。因此,与下划线或带有破折号的模型的关系存在问题... 在config.js中,我试图模拟JSONAPI Backend,它运行良好。刚刚用“paperwork_products”取代“文书产品”
幻影回复:
"relationships":{
"customer":{
"data":{
"type":"customers",
"id":"1"
}
},
"paperwork-products":{
"data":[
{
"type":"paperwork-products",
"id":"1"
}
]
}
}
应该是:
"relationships":{
"customer":{
"data":{
"type":"customers",
"id":"1"
}
},
"paperwork_products":{
"data":[
{
"type":"paperwork_products",
"id":"1"
}
]
}
}
我与hasMany关系的其他模型没有任何问题。
答案 0 :(得分:0)
要确认,您是否设置了具有相同关系的Ember Data模型?没有这些,事情可能会发生它工作得很好......
如果你这样做,你也可以发布这些模型吗?
此外,作为一个FYI,Mirage 0.3.0附带一个自动同步设置,可以读取您的Ember Data模型并创建相应的Mirage模型而无需任何工作。这很可爱......
编辑: 我建议你重新修改你的Ember Data模型以使用驼峰关系。如果您执行以下操作:
模型/ paperwork.js
export default DS.Model.extend({
customer: DS.belongsTo('customer'),
paperworkProducts: DS.hasMany('paperwork-product', { async: true }),
});
我希望它可以毫无问题地工作,因为Ember Data会自动将camelCased关系转换为相应的JSON-API密钥
这对你有用吗?