2013-03-25 2 views
0

Использование данных ember с адаптером Django REST. Имея установку содержания контроллеров, основанные на модели принимаемого в отношениях в setupController проблемы перехватываетEmber.js принадлежит для отношения undefined, но hasMany массив заполнен

Я ставлю точки разрыва, и они пошли в следующем порядке:

  1. ArtistRoute.model
  2. ArtistTrackRoute.model
  3. ArtistRoute .setupController
  4. ArtistTrackRoute.setupController

Пожалуйста, смотрите комментарии в этих функциях для получения дополнительной информации/вопросов.

основным художником трека является трек -> belongsTo -> Альбом -> belongsTo -> художник

Художники: художник -> hasMany -> альбомы

Альбом Альбом -> belongsTo -> художник альбом -> hasMany -> отслеживает

Track трек -> belongsTo -> альбом

Я проверил мой вывод апи, а ресурс ссылка определенно там.

Вот мои модели:

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); 

    } 
}); 

Кроме того, когда breakpointing в ArtistAlbumRoute.setupController, я заметил, что album._data.hasMany.tracks == [1] Но album._data.belongsTo.artist == undefined .... wtf?!?!?!

У меня все еще есть трудное время, обматывающее мою голову вокруг Ember, поэтому любые дополнительные советы очень ценятся. Благодаря!

Кроме того, после загрузки страницы и открытия консоли, что бы я набрал для доступа к контроллерам, чтобы узнать, что установлено?

ответ

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')) 
    } 
}); 
Смежные вопросы