<ul class="nav">
<li><a {{action showArtists href=true}}>Artists</a></li>
<li><a {{action showAlbums href=true}}>Albums</a></li>
- <li><a href="#">Songs</a></li>
+ <li><a {{action showSongs href=true}}>Songs</a></li>
</ul>
</div>
</div>
<strong>{{album.name}}</strong> ({{album.year}})
</script>
+ <script type="text/x-handlebars" data-template-name="songs">
+ {{#each song in controller.arrangedContent}}
+ <li>{{view Calf.SongView contentBinding="song"}}</li>
+ {{/each}}
+ </script>
+
+ <script type="text/x-handlebars" data-template-name="song">
+ <strong>{{song.title}}</strong> ({{song.duration}})
+ </script>
+
<!-- The glorious cowhide framework. -->
<script src="../dist/cowhide.js"></script>
<script src="javascripts/app/models/artist.js"></script>
<script src="javascripts/app/models/album.js"></script>
+ <script src="javascripts/app/models/song.js"></script>
<script src="javascripts/app/views/application.js"></script>
<script src="javascripts/app/views/artists.js"></script>
<script src="javascripts/app/views/artist.js"></script>
<script src="javascripts/app/views/albums.js"></script>
<script src="javascripts/app/views/album.js"></script>
+ <script src="javascripts/app/views/songs.js"></script>
+ <script src="javascripts/app/views/song.js"></script>
<script src="javascripts/app/controllers/application.js"></script>
<script src="javascripts/app/controllers/artists.js"></script>
<script src="javascripts/app/controllers/albums.js"></script>
+ <script src="javascripts/app/controllers/songs.js"></script>
<!-- This file contains other code needed by the example app. -->
<script src="javascripts/example.js"></script>
--- /dev/null
+(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);
+ });
+ }
+ });
+
+ app.SongsController = SongsController;
+ app.songsController = SongsController.create();
+})(window.Calf, window.Ember, window._);
\ No newline at end of file
--- /dev/null
+(function(app, Ember) {
+ 'use strict';
+
+ var Song = Ember.Object.extend({
+ id: null,
+ title: null,
+ duration: null
+ });
+
+ app.Song = Song;
+})(window.Calf, window.Ember);
root: Ember.Route.extend({
showArtists: Ember.Route.transitionTo('artists'),
showAlbums: Ember.Route.transitionTo('albums'),
+ showSongs: Ember.Route.transitionTo('songs'),
index: Ember.Route.extend({
route: '/',
var controller = router.get('applicationController');
controller.connectOutlet('albums');
}
+ }),
+
+ songs: Ember.Route.extend({
+ route: '/songs',
+ connectOutlets: function(router) {
+ var controller = router.get('applicationController');
+ controller.connectOutlet('songs');
+ }
})
})
});
"albums": [
{"id": 0,
"name": "11:11",
- "year": 2001
+ "year": 2001,
+ "songs": [
+ {"id": 0,
+ "title": "Love Affair",
+ "duration": "2:22"
+ },
+ {"id": 1,
+ "title": "Rejazz",
+ "duration": "3:37"
+ },
+ {"id": 2,
+ "title": "Back of a Truck",
+ "duration": "5:52"
+ }
+ ]
},
{"id": 1,
"name": "Songs",
});
return albums;
+ },
+
+ getSongs: function(artist, album) {
+ var songs = [];
+
+ _.each(this.data, function(artist_data) {
+ if (artist_data.albums &&
+ (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'))) {
+ _.each(album_data.songs, function(song_data) {
+ songs.push(app.Song.create(song_data));
+ });
+ }
+ });
+ }
+ });
+
+ return songs;
}
};
--- /dev/null
+(function(app, Ember) {
+ 'use strict';
+
+ var SongView = Ember.View.extend({
+ templateName: 'song',
+ tagName: 'span',
+ classNames: ['song']
+ });
+
+ app.SongView = SongView;
+})(window.Calf, window.Ember);
\ No newline at end of file
--- /dev/null
+(function(app, Ember) {
+ 'use strict';
+
+ var SongsView = Ember.View.extend({
+ templateName: 'songs',
+ tagName: 'ul',
+ classNames: ['item-list', 'striped']
+ });
+
+ app.SongsView = SongsView;
+})(window.Calf, window.Ember);
\ No newline at end of file