</script>
<script type="text/x-handlebars" data-template-name="artist">
- {{#if artist.isBandOnly}}
- <strong>{{artist.bandName}}</strong>
- {{else}}
- <strong>{{artist.lastName}}</strong>, {{artist.firstName}}
- {{#if artist.bandName}}
- <em>({{artist.bandName}})</em>
+ <a {{action showArtistsAlbums artist href=true}}>
+ {{#if artist.isBandOnly}}
+ <strong>{{artist.bandName}}</strong>
+ {{else}}
+ <strong>{{artist.lastName}}</strong>, {{artist.firstName}}
+ {{#if artist.bandName}}
+ <em>({{artist.bandName}})</em>
+ {{/if}}
{{/if}}
- {{/if}}
+ </a>
</script>
<script type="text/x-handlebars" data-template-name="albums">
</script>
<script type="text/x-handlebars" data-template-name="album">
- <strong>{{album.name}}</strong> ({{album.year}})
+ <a {{action showAlbumsSongs album href=true}}>
+ <strong>{{album.name}}</strong> ({{album.year}})
+ </a>
</script>
<script type="text/x-handlebars" data-template-name="songs">
-(function(app, Ember, _) {
+(function(app, Ember) {
'use strict';
var AlbumsController = Ember.ArrayController.extend({
content: [],
- sortProperties: ['name'],
-
- init: function() {
- var self = this;
- var data = [];
-
- _.each(app.Store.getAlbums(), function(album) {
- self.pushObject(album);
- });
- }
+ sortProperties: ['name']
});
app.AlbumsController = AlbumsController;
app.albumsController = AlbumsController.create();
-})(window.Calf, window.Ember, window._);
\ No newline at end of file
+})(window.Calf, window.Ember);
\ No newline at end of file
var ArtistsController = Ember.ArrayController.extend({
content: [],
- sortProperties: ['lastName', 'firstName', 'bandName'],
-
- init: function() {
- var self = this;
- var data = [];
-
- _.each(app.Store.data, function(artist) {
- self.pushObject(app.Store.getArtist(artist));
- });
- }
+ sortProperties: ['lastName', 'firstName', 'bandName']
});
app.ArtistsController = ArtistsController;
-(function(app, Ember, _) {
+(function(app, Ember) {
'use strict';
var SongsController = Ember.ArrayController.extend({
content: [],
- sortProperties: ['title'],
-
- init: function() {
- var self = this;
- var data = [];
-
- _.each(app.Store.getSongs(), function(song) {
- self.pushObject(song);
- });
- }
+ sortProperties: ['title']
});
app.SongsController = SongsController;
app.songsController = SongsController.create();
-})(window.Calf, window.Ember, window._);
\ No newline at end of file
+})(window.Calf, window.Ember);
\ No newline at end of file
-(function(app, Ember) {
+(function(app, Ember, _) {
'use strict';
var Album = Ember.Object.extend({
id: null,
+ artist: null,
name: null,
year: null
});
+ Album.reopenClass({
+ find: function(artist) {
+ return app.Store.getAlbums(artist);
+ }
+ });
+
app.Album = Album;
-})(window.Calf, window.Ember);
+})(window.Calf, window.Ember, window._);
}.property('firstName', 'lastName', 'bandName')
});
+
+ Artist.reopenClass({
+ find: function() {
+ return app.Store.getArtists();
+ }
+ });
+
app.Artist = Artist;
})(window.Calf, window.Ember);
-(function(app, Ember) {
+(function(app, Ember, _) {
'use strict';
var Song = Ember.Object.extend({
duration: null
});
+ Song.reopenClass({
+ find: function(artist, album) {
+ return app.Store.getSongs(artist, album);
+ }
+ });
+
app.Song = Song;
-})(window.Calf, window.Ember);
+})(window.Calf, window.Ember, window._);
root: Ember.Route.extend({
showArtists: Ember.Route.transitionTo('artists'),
+ showArtistsAlbums: Ember.Router.transitionTo('artists_albums'),
+
showAlbums: Ember.Route.transitionTo('albums'),
+ showAlbumsSongs: Ember.Route.transitionTo('albums_songs'),
showSongs: Ember.Route.transitionTo('songs'),
index: Ember.Route.extend({
route: '/artists',
connectOutlets: function(router) {
var controller = router.get('applicationController');
- controller.connectOutlet('artists');
+ controller.connectOutlet('artists', app.Artist.find());
+ }
+ }),
+
+ artists_albums: Ember.Route.extend({
+ route: '/artist/:artist_id/albums',
+ connectOutlets: function (router, artist) {
+ var controller = router.get('applicationController');
+ controller.connectOutlet('albums', app.Album.find(artist));
}
}),
route: '/albums',
connectOutlets: function(router) {
var controller = router.get('applicationController');
- controller.connectOutlet('albums');
+ controller.connectOutlet('albums', app.Album.find());
+ }
+ }),
+
+ albums_songs: Ember.Route.extend({
+ route: '/artist/:artist_id/album/:album_id/songs',
+ connectOutlets: function(router, album) {
+ var controller = router.get('applicationController');
+ var artist = album.get('artist');
+ controller.connectOutlet('songs', app.Song.find(artist, album));
}
}),
route: '/songs',
connectOutlets: function(router) {
var controller = router.get('applicationController');
- controller.connectOutlet('songs');
+ controller.connectOutlet('songs', app.Song.find());
}
})
})
}
],
- getArtist: function(artist_data) {
- return app.Artist.create(artist_data);
+ getArtists: function() {
+ var artists = [];
+
+ _.each(this.data, function(artist_data) {
+ artists.push(app.Artist.create(artist_data));
+ });
+
+ return artists;
},
getAlbums: function(artist) {
if (artist_data.albums &&
(artist === undefined || artist_data.id === artist.get('id'))) {
_.each(artist_data.albums, function(album_data) {
- albums.push(app.Album.create(album_data));
+ var album = app.Album.create(album_data);
+ var artist = app.Artist.create(artist_data);
+ album.set('artist', artist);
+ albums.push(album);
});
}
});
_.each(this.data, function(artist_data) {
if (artist_data.albums &&
- (artist === undefined || artist_data.id === artist.geT('id'))) {
+ (artist === undefined || artist_data.id === artist.get('id'))) {
_.each(artist_data.albums, function(album_data) {
if (album_data.songs &&
(album === undefined || album_data.id === album.get('id'))) {