【发布时间】:2015-05-31 11:51:40
【问题描述】:
我搜索了有关其工作原理的明确解释,但还没有找到。我正在寻找一个清晰而详细的解释,假设我是所有这些框架的新手。
所以这是我的问题,我正在使用 Ember.js(使用 Ember-cli)和 Java 中的 Play-framework 下的后端编写一个前端应用程序。我试图让我的前端消化来自我的 API 的一些 json。这是json:
{
"buildings": [
{
"id": 0,
"createdDateTime": "2015-03-27T06:39:19.913Z",
"address": {
"id": 1,
"city": "City",
"civicNumber": 1287,
"country": "Canada",
"postalZipCode": "G1Q1Q9",
"provinceOrState": "QC",
"streetName": "A Street Name"
},
"cost": 1000000,
"earnings": 2300,
"mainPicturePath": "http://dummyimage.com/200x200/999/fff.png&text=Building",
"type": "DUPLEX",
"yearOfBuilt": 1998
},
{
"id": 1,
"createdDateTime": "2015-03-27T06:39:19.935Z",
"address": {
"id": 2,
"city": "City",
"civicNumber": 1289,
"country": "Canada",
"postalZipCode": "G1Q1Q9",
"provinceOrState": "QC",
"streetName": "A Street Name"
},
"cost": 980000,
"earnings": 670,
"mainPicturePath": "http://dummyimage.com/200x200/999/fff.png&text=Building",
"type": "TRIPLEX",
"yearOfBuilt": 1980
}]
}
这是我的 emberjs 代码:
//models/building.js
export default DS.Model.extend({
type: DS.attr('string'),
address: DS.belongsTo('address', {embedded: 'always'}),
cost: DS.attr('number'),
yearOfBuilt: DS.attr('number'),
earnings: DS.attr('number'),
createdDateTime: DS.attr('date'),
mainPicturePath: DS.attr('string')
});
//models/address.js
export default DS.Model.extend({
civicNumber: DS.attr('number'),
streetName: DS.attr('string'),
city: DS.attr('string'),
provinceOrState: DS.attr('string'),
country: DS.attr('string'),
postalZipCode: DS.attr('string'),
building: DS.belongsTo('building', {embedded: 'always'})
});
//serializers/building.js
export default DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, {
attrs: {
address: {embedded: 'always'}
}
});
这不会引发任何错误并且工作正常。问题是,我不完全理解 building 中嵌入对象 address 的代码(我确实了解 DS 模型,export 来自 ember-cli 和 belongsTo 工作)。有人可以详细解释一下它是如何工作的(带有 EmbeddedRecordsMixin 的 RESTSerializer、{embedded: 'always'} 属性和其他可用选项)?任何澄清将不胜感激。
让我们也把这个提升到一个新的水平,比如说我不想为每个地址都有一个 id,因为它们永远不应该被使用超过一次(不能有 2 个建筑物在同一个地址)。我将如何实现这一目标?也许我会将地址存储在数据库中我的建筑对象的同一记录中,并且不想要一个额外的地址表。根据这些解决方案,最好的方法是什么(如果有,请随时提出更好的解决方案)?
请注意,我已经阅读了以下链接:
- Ember-data: deserialize embedded model
- http://mozmonkey.com/2013/12/loading-json-with-embedded-records-into-ember-data-1-0-0-beta/(没有提到 EmbeddedRecordsMixin)
- How to access nested object in json with Ember data(说说我也不懂的App.Adapter.Map)
- https://github.com/lytics/ember-data.model-fragments(非常有趣的项目可能会退出正是我正在寻找的)
谢谢!
【问题讨论】:
标签: json ember.js ember-data