gpt4 book ai didi

ember.js - 与 Ember CLI Mirage 的关系

转载 作者:行者123 更新时间:2023-12-04 11:03:55 26 4
gpt4 key购买 nike

我是 Ember 的新手,我正在尝试创建一个简单的应用程序,其中有 2 个模型,Mountains 和 Ranges。一个山脉有许多山,而一座山属于一个山脉。
我想在他们之间建立一种关系。
我已经在网上搜索过,但我发现了不同的解释,我仍然在为这个问题而苦苦挣扎。

我的模型是:
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})
});
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})
});

我的 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 });
}

这些是 mirage/factories/range.jsmirage/factories/mountain.js文件:
import Mirage, {faker} from 'ember-cli-mirage';

export default Mirage.Factory.extend({

});

这是在 Ember-CLI 中与 Mirage 建立关系的正确方法吗?
我还想在喜马拉雅页面(我已经创建了一条路线和一个模板)中显示属于喜马拉雅山脉的所有山脉。我怎样才能做到这一点?

提前致谢。

最佳答案

目前,您必须手动进行关系簿记,所以是的,您走对了路。请注意,您可能希望使用山地 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]});

但是 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' });

I'd also like to show in the himalaya page (I've already created a route and a template) all the mountains that belong to the range himalaya. How can I achieve this?



直接的解决方案是创建以下 Mirage 路线:
  • mountains/:id
  • ranges/:id

  • 如果你的关系是同步的,在你的 Ember range路线,您必须请求一个范围,获取其相关的山地 ID 并请求它们。

    如果您的关系是异步的,那么您只需要请求范围。 Ember/ED 将在从模板访问时自动请求缺失的相关记录。但这会导致页面上的数据丢失。

    一个更优雅的解决方案是侧载。您只需要一个 ranges/:id海市蜃楼路线。当通过该路线请求范围时,除了请求的范围之外,您还有 Mirage 服务(侧载)相关的山脉。

    还要考虑您正在使用的 JSON 结构。如果您使用的是老式适配器/序列化器,则 API 有点随意,您没问题。如果您使用新的 JSONAPI 适配器,则需要遵守 JSONAPI 规范。为了侧面加载某些数据,您需要 explicitly ask for it .

    JSONAPI 序列化在 Mirage 中尚不可用。最终您将能够使用速记,但目前您必须 manually format the data到 JSONAPI 格式。

    关于ember.js - 与 Ember CLI Mirage 的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32562358/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com