[Calf] Adds ability to get artist's albums and album's songs.
authorSalvatore Iovene <salvatore.iovene@intel.com>
Tue, 2 Oct 2012 10:58:53 +0000 (13:58 +0300)
committerSalvatore Iovene <salvatore.iovene@intel.com>
Tue, 2 Oct 2012 10:58:53 +0000 (13:58 +0300)
example/index.html
example/javascripts/app/controllers/albums.js
example/javascripts/app/controllers/artists.js
example/javascripts/app/controllers/songs.js
example/javascripts/app/models/album.js
example/javascripts/app/models/artist.js
example/javascripts/app/models/song.js
example/javascripts/app/router.js
example/javascripts/app/store.js

index 2f96731..9b13c1f 100644 (file)
     </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">
@@ -69,7 +71,9 @@
     </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">
index e14ec75..e65cba7 100644 (file)
@@ -1,20 +1,11 @@
-(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
index 0e8df07..2b49898 100644 (file)
@@ -3,16 +3,7 @@
 
     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;
index baaf838..c8638ca 100644 (file)
@@ -1,20 +1,11 @@
-(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
index 1416439..8b92305 100644 (file)
@@ -1,11 +1,18 @@
-(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._);
index 086edd6..8a7ba84 100644 (file)
         }.property('firstName', 'lastName', 'bandName')
     });
 
+
+    Artist.reopenClass({
+        find: function() {
+            return app.Store.getArtists();
+        }
+    });
+
     app.Artist = Artist;
 })(window.Calf, window.Ember);
index 269877a..d9b505c 100644 (file)
@@ -1,4 +1,4 @@
-(function(app, Ember) {
+(function(app, Ember, _) {
     'use strict';
 
     var Song = Ember.Object.extend({
@@ -7,5 +7,11 @@
         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._);
index d8b9958..4a8ac7f 100644 (file)
@@ -6,7 +6,10 @@
 
         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));
                 }
             }),
 
@@ -34,7 +54,7 @@
                 route: '/songs',
                 connectOutlets: function(router) {
                     var controller = router.get('applicationController');
-                    controller.connectOutlet('songs');
+                    controller.connectOutlet('songs', app.Song.find());
                 }
             })
         })
index e93a599..d1dd3dc 100644 (file)
             }
         ],
 
-        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);
                     });
                 }
             });
@@ -88,7 +97,7 @@
 
             _.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'))) {