在自定义服务器 PHP API 上使用 Ember RC6 和 Ember-Data v0.13-54 开发应用程序时遇到了模型关系(主要是多对多)和侧面加载的一些问题。
有问题的模型是:
App.Member = DS.Model.extend({
apiToken: DS.attr('string'),
apiTokenExpire: DS.attr('string'),
favourites: DS.hasMany('App.Presentation')
});
App.Presentation = DS.Model.extend(
{
title: DS.attr('string'),
description: DS.attr('string'),
date: DS.attr('date'),
category: DS.belongsTo('App.Category'),
tags: DS.hasMany('App.Tag'),
employees: DS.hasMany('App.Member'),
presentation: DS.belongsTo('App.File'),
presenterNotes: DS.belongsTo('App.File'),
cover: DS.belongsTo('App.Image')
});
要让 RESTadapater 发送与Member
我拥有的模型的关系:
App.APIRESTAdapter.map('App.Member', {
favourites: {embedded: 'always'}
});
加载/members/1
服务器时返回:
{
"member": {
"api_token": "9fa236ad58726584d7b61bcf94b4dda37cbd3a24",
"api_token_expire": "1383832335",
"id": 1,
"favourite_ids": [ 3 ],
"group_ids": [ 2 ]
},
"presentations": [
{
"title": "That's a new one!",
"category_id": 2,
"id": 3,
"tag_ids": [ 1 ],
"employee_ids": [ 1 ]
}
]
}
但是,如果我登录get('member.favourites').mapProperty('id')
,我会得到一个空数组,并且favourites
实际上没有一个数组被添加到Member
模型中。
如果我禁用favourites
RESTAdapter 上的嵌入,一切正常。我只是想知道我是否缺少某些东西,或者 JSON 响应的格式是否存在一些问题?
编辑:
做了一些挖掘,似乎问题出在关系名称(收藏夹、雇员)与侧载数据时使用的模型名称(成员、演示)不同的事实。奇怪,自转。12 https://github.com/emberjs/data/blob/master/BREAKING_CHANGES.md模型应按类型侧载。
做一些测试,我为这两个模型添加了一个新的多对多关系:
App.Member
得到presentations: DS.hasMany('App.Presentation')
App.Presentation
得到members: DS.hasMany('App.Member')
服务器返回的 JSON 完全相同,在记录时,get('member.presentations')
我现在得到了应有的演示列表。
在这一点上,这对我来说似乎是一个错误,但也许我错过了什么?我已经尝试在收藏夹和员工RESTAdapater
上进行映射,但这没有帮助......也许还有其他一些适配器配置可以提供帮助?