【发布时间】:2020-04-03 12:14:36
【问题描述】:
我有一个基于 Ember Data 的应用。我想弄清楚如何使代码更紧凑。我的应用程序看起来像这样:: Express 服务器有几个端点。 在 Ember 应用程序中,每个 endpoint 对应于:adapter、serializer、model、route、template。一切正常,但代码太繁琐。我是 Ember 的新手,也许有一种方法可以更普遍地使用适配器和其他工具。下面是我的应用程序的一些部分,说明了它是如何工作的。
本地主机:5000/api/汽车
localhost:5000/api/车辆
适配器“汽车”:
import RESTAdapter from '@ember-data/adapter/rest';
export default RESTAdapter.extend({
host: http://localhost:5000/api,
pathForType() {
return "cars";
}
});
适配器“车辆”:
import RESTAdapter from '@ember-data/adapter/rest';
export default RESTAdapter.extend({
host: http://localhost:5000/api,
pathForType() {
return "vehicles";
}
});
序列化器“汽车”:
import RESTSerializer from '@ember-data/serializer/rest';
export default RESTSerializer.extend({
normalizeResponse(store, primaryModelClass, payload, id, requestType) {
payload = {
cars: payload
};
return this._super(store, primaryModelClass, payload, id, requestType);
},
primaryKey: '_id'
});
序列化器“车辆”:
import RESTSerializer from '@ember-data/serializer/rest';
export default RESTSerializer.extend({
normalizeResponse(store, primaryModelClass, payload, id, requestType) {
payload = {
vehicles: payload
};
return this._super(store, primaryModelClass, payload, id, requestType);
},
primaryKey: '_id'
});
车型:
import DS from 'ember-data';
const { attr } = DS;
export default DS.Model.extend({
name: attr("string"),
body: attr("array"),
date: attr('date')
});
车辆模型(与汽车相同!):
import DS from 'ember-data';
const { attr } = DS;
export default DS.Model.extend({
name: attr("string"),
body: attr("array"),
date: attr('date')
});
汽车索引路线:
import Route from '@ember/routing/route';
export default class CarsIndexRoute extends Route {
model() {
return this.store.findAll("car");
}
}
车辆索引路线:
import Route from '@ember/routing/route';
export default class VehiclesIndexRoute extends Route {
model() {
return this.store.findAll("vehicle");
}
}
Hbs 模板完全相似。 汽车/index.hbs(和车辆/index.hbs):
{{#each @model as |item|}}
<h3>{{item.name}}</h3>
<p>{{item.body}}</p>
{{/each}}
代码清楚地表明结构相同,区别仅在于一个参数,对应模型名称和api端点的“end”。 有人能告诉我如何按照 Ember 的传统更正确地组织一切吗? 谢谢!
【问题讨论】:
-
你的问题有点宽泛,而且基于观点。你觉得你的代码有什么“麻烦”?你想达到什么目的?
-
我的意思是,应用程序中的许多工具都针对不同的端点重复使用。例如,是否可以使用一个适配器和一个序列化程序,并将“汽车”和“车辆”作为变量传递?
-
1. Application Adapter 和 Application Serializer 可用于所有模型 2. Car Model 可以从 Vehicle Model 扩展,adapterFor 可以在 Vehicle Model 中指定 3. Car Adapter 和 Car Serializer 可以分别从 Vehicle Adapter 和 Vehicle Serializer 扩展 4. 使用 mixins ! 5. 更多解决方案...
标签: javascript ember.js ember-data