Complete the RecipeBook controller

This commit is contained in:
Andrew Miner
2014-12-23 09:12:02 -08:00
parent 9fc0407fe4
commit b05fc4c5c9
19 changed files with 205 additions and 50 deletions
+38 -1
View File
@@ -12,6 +12,9 @@ views = require '../views'
module.exports = class BaseController extends Backbone.View
constructor: (options={})->
Object.defineProperty this, 'model', get:@getModel, set:@setModel
@_model = null
@_rendered = false
@_parent = options.parent
@_children = []
@@ -35,10 +38,40 @@ module.exports = class BaseController extends Backbone.View
# Event Methods ################################################################################
onDidModelChange: ->
@_tryRefresh()
onDidModelSync: ->
@_tryRefresh()
onWillRender: -> # do nothing
onDidRender: ->
@refresh()
@_tryRefresh()
onWillShow: -> # do nothing
onDidShow: -> # do nothing
onWillChangeModel: (oldModel, newModel)->
if oldModel?.on?
@stopListening oldModel
if newModel?.on?
@listenTo newModel, 'sync', (e)=> @onDidModelSync e
@listenTo newModel, 'change', (e)=> @onDidModelChange e
return true
# Property Methods #############################################################################
getModel: ->
return @_model
setModel: (newModel)->
return if @model is newModel
return unless @onWillChangeModel @_model, newModel
@_model = newModel
@_tryRefresh()
# Backbone.View Overrides ######################################################################
@@ -75,3 +108,7 @@ module.exports = class BaseController extends Backbone.View
_loadTemplate: (templateName)->
if templateName?
@_template = views[templateName]
_tryRefresh: ->
return unless @_rendered
@refresh()
@@ -1,5 +1,5 @@
###
# Crafting Guide - crafting_guide_controller.coffee
# Crafting Guide - landing_page_controller.coffee
#
# Copyright (c) 2014 by Redwood Labs
# All rights reserved.
@@ -21,5 +21,5 @@ module.exports = class LandingPageController extends BaseController
# BaseController Overrides #####################################################################
onDidRender: ->
@recipeBooksController = @addChild RecipeCatalogController, '.view__recipe_catalog'
@recipeBooksController = @addChild RecipeCatalogController, '.view__recipe_catalog', model:@model.catalog
super
@@ -0,0 +1,28 @@
###
# Crafting Guide - recipe_book_controller.coffee
#
# Copyright (c) 2014 by Redwood Labs
# All rights reserved.
###
BaseController = require './base_controller'
########################################################################################################################
module.exports = class RecipeBookController extends BaseController
constructor: (options={})->
if not options.model? then throw new Error "options.model is required"
options.templateName = 'recipe_book'
super options
# BaseController Overrides #####################################################################
onDidRender: ->
@$name = @$('td:nth-child(1) p')
@$description = @$('td:nth-child(2) p')
super
refresh: ->
@$name.html "#{@model.modName} (#{@model.modVersion})"
@$description.html "#{@model.description}"
@@ -5,12 +5,36 @@
# All rights reserved.
###
BaseController = require './base_controller'
BaseController = require './base_controller'
RecipeBookController = require './recipe_book_controller'
########################################################################################################################
module.exports = class RecipeCatalogController extends BaseController
constructor: (options={})->
if not options.model? then throw new Error "options.model is required"
@_bookControllers = []
options.templateName = 'recipe_catalog'
super options
# BaseController Overrides #####################################################################
onDidRender: ->
@$table = @$('table')
super
refresh: ->
@$('table tr:not(:last-child)').remove()
return unless @model?
@_bookControllers = []
for i in [@model.books.length-1..0] by -1
book = @model.books[i]
controller = new RecipeBookController model:book
controller.render()
@_bookControllers.push controller
@$table.prepend controller.$el
super