--- /dev/null
+/**
+ * Books controller
+ * Used to manage books; showing the first book, showing a spefied book, loading books, and showing their
+ * related views
+ */
+Ext.define('Books.controller.Books', {
+ extend: 'Ext.app.Controller',
+
+ models: ['Book'],
+ stores: ['Books', 'Reviews'],
+
+ refs: [
+ {ref: 'bookSideBar', selector: 'booksidebar'},
+ {ref: 'bookView', selector: 'bookview'},
+ {ref: 'reviewList', selector: 'reviewlist'}
+ ],
+
+ init: function() {
+ var me = this;
+
+ me.control({
+ 'booksidebar': {
+ selectionchange: me.onSideBarSelectionChange
+ }
+ });
+
+ me.getBooksStore().on({
+ scope: me,
+ load : me.onBooksStoreLoad
+ });
+ },
+
+ onLaunch: function() {
+ this.getBookSideBar().bindStore(this.getBooksStore());
+ },
+
+ onSideBarSelectionChange: function(view, records) {
+ if (records.length) {
+ this.showBook(records[0]);
+ }
+ },
+
+ /**
+ * Called when the books store is loaded.
+ * Checks if there are any records, and if there are, it delegates to show the first record
+ * as well as selecting that record in the sidebar
+ */
+ onBooksStoreLoad: function(store, records) {
+ Ext.defer(function() {
+ if (records.length) {
+ var record = records[0],
+ me = this;
+
+ me.getBookSideBar().getSelectionModel().select(record);
+ }
+ }, 500, this);
+ },
+
+ /**
+ * Shows a specified record by binding it to
+ */
+ showBook: function(record) {
+ var me = this;
+
+ me.getBookView().bind(record);
+ me.getReviewList().bind(record, me.getReviewsStore());
+ }
+});
\ No newline at end of file