Complete the RecipeBook controller
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user