Я пытаюсь загрузить родительскую запись, содержащую две записи hasMany. Вот мои модели (я использую уголек-приложение-кит, кстати с последней канарейкой от уголька и Ember-данных):hasMany Данные не загружаются
var Route = DS.Model.extend({
name: DS.attr(),
description: DS.attr(),
creation: DS.attr(),
modified: DS.attr(),
active: DS.attr(),
adhoc: DS.attr(),
routeUsers: DS.hasMany('user'),
userApprovals: DS.hasMany('userApproval')
});
export default Route;
var UserApproval = DS.Model.extend({
user: DS.belongsTo('user'),
amount: DS.attr(),
approval: DS.attr(),
comment: DS.attr(),
denyRedirect: DS.belongsTo('user')
});
export default UserApproval;
var User = DS.Model.extend({
firstname: DS.attr(),
lastname: DS.attr(),
username: DS.attr(),
email: DS.attr(),
fullName: function(){
return this.get('firstname') + ' ' + this.get('lastname');
}.property('firstname', 'lastname')
});
export default User;
Вот это JSON, который возвращается из моего экземпляра MongoDB:
{
"route": {
"name": "4",
"description": "123",
"adhoc": true,
"_id": "527822dee56a06dc2a000002",
"__v": 0,
"user_approvals": [
{
"amount": "22",
"user_id": "5277ca37b900b14c0e000003",
"deny_redirect_id": "5277ca25b900b14c0e000002",
"id": "f0ced142-aee1-4abb-f36a-56ae0088141b"
}
],
"route_users": [
{
"firstname": "first",
"lastname": "last",
"username": "flast",
"email": "[email protected]",
"id": "5277ca37b900b14c0e000003"
}
]
}
}
Вот мой маршрут сериализатор:
import ApplicationSerializer from 'appkit/serializers/application';
var RouteSerializer = ApplicationSerializer.extend({
attrs: {
routeUsers: {
embedded: 'always'
},
userApprovals: {
embedded: 'always'
}
}
});
export default RouteSerializer;
Я делаю нормализации в сериализаторе приложения для _id именно поэтому я простирающийся мой маршрут сериалайзер отходящим от него. Это единственное изменение в моем сериализаторе приложений.
Проблема, с которой я сталкиваюсь, заключается в том, что когда моя модель маршрута загружается и устанавливается в моем контроллере, ни одно из отношений hasMany не существует. Когда я смотрю на свою модели с помощью расширения уголька хрома и консоли это выглядит следующим образом:
adhoc: true
description: "something here"
id: "527948268a65b92022000001"
name: "14"
routeUserIds: Array[1]
0: "5277ca25b900b14c0e000002"
length: 1
__proto__: Array[0]
routeUsers: undefined
userApprovalIds: Array[1]
0: "017b4fe7-9f98-4bce-9c8d-089309b7729a"
length: 1
__proto__: Array[0]
userApprovals: undefined
v: 0
__proto__: Object
Так что я знаю, что мой маршрут помещается в модели, я могу вынести такие вещи, как название и описание, но ничего есть для меня hasMany отношения. Как я могу получить доступ к моим отношениям hasMany? Я могу посмотреть на магазин и посмотреть, что мои отношения hasMany загружаются в хранилище после доставки полезной нагрузки. Я попытался перекрывая extractSingle с этим:
extractSingle: function(store, type, payload, id, requestType) {
var userApprovals = payload.route.user_approvals,
approvalIds = userApprovals.mapProperty('id');
payload.user_approvals = userApprovals;
payload.route.user_approvals = approvalIds;
return this._super.apply(this, arguments);
}
Но это делает точно такой же результат, как и раньше, без информации hasMany загруженным, только ид.
Я искал последнюю пару дней и получил указал на этом PR:
https://github.com/emberjs/data/pull/1404
Но я до сих пор не могу заставить его работать. Я уверен, что мне что-то не хватает, просто, наверное, нужны другие глаза.
Спасибо, Jarred