spl*_*unk 7 ember.js ember-cli ember-cli-mirage
我是Ember的新手,我正在尝试创建一个简单的应用程序,我有2个模型,山脉和山脉.范围有许多山脉,而山脉属于一个范围.我想在他们之间建立一种关系.我在网上搜索过,但我发现了不同的解释,我仍然在努力解决这个问题.
我的模特是:
mountain.js
import DS from 'ember-data';
export default DS.Model.extend({
name: DS.attr('string'),
altitude: DS.attr('number'),
range: DS.belongsTo('range', {async: true})
});
Run Code Online (Sandbox Code Playgroud)
range.js
import DS from 'ember-data';
export default DS.Model.extend({
name: DS.attr('string'),
length: DS.attr('number'),
mountains: DS.hasMany('mountain', {async: true})
});
Run Code Online (Sandbox Code Playgroud)
我的mirage/scenario/default.js文件看起来像这样:
export default function(server)
{
var himalaya = server.create('range', {id: 1, name:'Himalaya', length:'16598' });
var karakorum = server.create('range', {id: 2, name:'Karakorum', length:'34801' });
var everest = server.create('mountain', {id:1, name: 'Everest', altitude: '8871', range_id:1 });
var K2 = server.create('mountain', {id:2, name: 'K2', altitude: '8657', range_id:2 });
}
Run Code Online (Sandbox Code Playgroud)
这些是mirage/factories/range.js和mirage/factories/mountain.js文件:
import Mirage, {faker} from 'ember-cli-mirage';
export default Mirage.Factory.extend({
});
Run Code Online (Sandbox Code Playgroud)
这是在Ember-CLI中与海市蜃楼建立关系的正确方法吗?我还想在喜马拉雅页面(我已经创建了一条路线和一个模板)中显示属于喜马拉雅山脉的所有山脉.我怎样才能做到这一点?
提前致谢.
目前,你必须手动进行关系簿记,所以是的,你是正确的方式.请注意,您可能希望使用mountain id更新范围:
var himalaya = server.create('range', {id: 1, name:'Himalaya', length:'16598' });
var karakorum = server.create('range', {id: 2, name:'Karakorum', length:'34801' });
var everest = server.create('mountain', {id:1, name: 'Everest', altitude: '8871', range_id:1 });
var k2 = server.create('mountain', {id:2, name: 'K2', altitude: '8657', range_id:2 });
server.db.ranges.update(himalaya.id, {mountain_ids: [everest.id]});
server.db.ranges.update(karakorum.id, {mountain_ids: [k2.id]});
Run Code Online (Sandbox Code Playgroud)
但Sam Selikoff正在努力开发Mirage,很快就可以做到这样的事情:
var everest = server.create('mountain', {id:1, name: 'Everest', altitude: '8871' });
var k2 = server.create('mountain', {id:2, name: 'K2', altitude: '8657' });
var himalaya = everest.create('range', {id: 1, name:'Himalaya', length:'16598' });
var karakorum = k2.create('range', {id: 2, name:'Karakorum', length:'34801' });
Run Code Online (Sandbox Code Playgroud)
我还想在喜马拉雅页面(我已经创建了一条路线和一个模板)中显示属于喜马拉雅山脉的所有山脉.我怎样才能做到这一点?
直接的解决方案是创建以下Mirage路线:
mountains/:idranges/:id如果你的关系是同步的,那么在你的Ember range路线中你必须要求一个射程,得到它相关的山ids并要求它们.
如果您的关系是异步的,那么您只需要请求范围.当从模板访问时,Ember/ED将自动请求丢失相关记录.但这会导致页面上缺少数据.
更优雅的解决方案是侧载.你只需要ranges/:id幻影路线.当通过该路线请求范围时,除了请求的范围之外,您还有Mirage服务(侧载)相关的山脉.
还要考虑您正在使用的JSON结构.如果你正在使用oldschool适配器/序列化器,那么API有点武断,你很好.如果您正在使用新的JSONAPI适配器,那么您需要遵守JSONAPI规范.为了使某些数据侧载,您需要明确地要求它.
开箱即用的Mirage尚未提供JSONAPI序列化.最终,您将能够使用缩写,但目前您必须手动将数据格式化为JSONAPI格式.
| 归档时间: |
|
| 查看次数: |
2012 次 |
| 最近记录: |