使用带有Django REST适配器的ember-data。在setupController挂钩
中根据接收到的模型关系设置控制器内容时遇到问题我把断点放进去了,按顺序排列:
请参阅这些功能中的评论以获取更多信息/问题。
曲目的主要艺术家是曲目 - > belongsTo - >专辑 - > belongsTo - >艺术家
艺术家: 艺术家 - > hasMany - >相册
相册 专辑 - > belongsTo - >艺术家 专辑 - > hasMany - >轨道
轨道 跟踪 - > belongsTo - >专辑
我已经检查了我的api输出,资源链接肯定在那里。
这是我的模特:
App.Album = DS.Model.extend({
'title' : DS.attr('string'),
'slug' : DS.attr('string'),
'year' : DS.attr('number'),
'type' : DS.attr('string'),
'image' : DS.attr('string'),
'genre' : DS.attr('string'),
'tracks' : DS.hasMany('App.Track'),
'artist' : DS.belongsTo('App.Artist')
});
App.Track = DS.Model.extend({
'title' : DS.attr('string'),
'slug' : DS.attr('string'),
'artists_titles' : DS.attr('string'),
'artists_ids' : DS.attr('string'),
'artists_slugs' : DS.attr('string'),
'year' : DS.attr('number'),
'genre' : DS.attr('string'),
'label' : DS.belongsTo('App.Label'),
'album' : DS.belongsTo('App.Album'),
'creator' : DS.attr('number'),
'created' : DS.attr('date'),
'modified' : DS.attr('date'),
});
App.Artist = DS.Model.extend({
'title' : DS.attr('string'),
'image' : DS.attr('string'),
'slug' : DS.attr('string'),
'genre' : DS.attr('string'),
'creator' : DS.attr('number'),
'created' : DS.attr('date'),
'modified' : DS.attr('date'),
'absoluteUrl' : DS.attr('string'),
'resourceUri' : DS.attr('string'),
'albums' : DS.hasMany('App.Album'),
'getImageURL' : function() {
return (this.get('image')) ? '/static/img/' + this.get('image') + '.jpg' : false;
}.property('image')
});
这是我的路线:
App.ArtistRoute = Ember.Route.extend({
'model' : function(params) {
// here first
return App.Artist.find(params.artist_id);
},
'serialize' : function(model) {
"use strict";
return {
'artist_id' : model.get('id'),
'artist_slug' : model.get('slug')
};
},
'setupController' : function(controller, artist) {
// here third...
// I inspected artist._data
// artist._data.hasMany.albums = [1]
this.controllerFor('artist').set('content', artist);
}
});
App.ArtistTrackRoute = Ember.Route.extend({
'model' : function(params) {
// here second
return App.Track.find(params.track_id);
},
'serialize' : function(model) {
"use strict";
return {
'track_id' : model.get('id'),
'track_slug' : model.get('slug')
}
},
'setupController' : function(controller, track) {
// here fourth... I inspected the track data object
// track._data.belongsTo.album == undefined
// what I'm trying to achieve here is to set the album
// controller based on the belongsTo relationship
// this.controllerFor('album').set('content', track.get('album'))
this.controllerFor('track').set('content', track);
}
});
此外,当在ArtistAlbumRoute.setupController中进行断点操作时,我注意到album._data.hasMany.tracks == [1] 但是album._data.belongsTo.artist == undefined .... wtf?!?!?!
我仍然很难在Ember身边缠头,所以我非常感谢任何额外的建议。谢谢!
此外,在页面加载并打开控制台后,我会输入什么来访问控制器以查看设置内容?
答案 0 :(得分:0)
事实证明,我的Tastypie资源设置与...
有关https://github.com/escalant3/ember-data-tastypie-adapter/issues/18
我的TrackResource看起来像这样:
class TrackResource(ModelResource):
album = fields.ToOneField('samped.api.resources.AlbumResource', 'album')
class Meta:
queryset = Track.objects.all()
我所要做的就是在专辑中添加“_id”
class TrackResource(ModelResource):
album_id = fields.ToOneField('samped.api.resources.AlbumResource', 'album')
class Meta:
queryset = Track.objects.all()
然后我能够做到:
App.ArtistTrackRoute = Ember.Route.extend({
'model' : function(params) {
return App.Track.find(params.track_id);
},
'serialize' : function(model) {
"use strict";
return {
'track_id' : model.get('id'),
'track_slug' : model.get('slug')
}
},
'setupController' : function(controller, track) {
this.controllerFor('track').set('content', track);
this.controllerFor('album').set('content', track.get('album'))
}
});