Step 1 in converting to a Backbone-based website

This commit is contained in:
Andrew Miner
2014-12-22 16:36:04 -08:00
parent dc9fd0de07
commit 16832e02dd
95 changed files with 41866 additions and 17 deletions
@@ -0,0 +1,77 @@
###
# Crafting Guide - base_controller.coffee
#
# Copyright (c) 2014 by Redwood Labs
# All rights reserved.
###
views = require '../views'
########################################################################################################################
module.exports = class BaseController extends Backbone.View
constructor: (options={})->
@_rendered = false
@_parent = options.parent
@_children = []
@_loadTemplate options.templateName
super options
# Public Methods ###############################################################################
addChild: (Controller, atSelector, options={})->
options.el = @$(atSelector)[0]
options.parent = this
child = new Controller options
child.render()
@_children.push child
return child
refresh: ->
logger.verbose "#{this} refreshing"
# Event Methods ################################################################################
onWillRender: -> # do nothing
onDidRender: ->
@refresh()
# Backbone.View Overrides ######################################################################
render: (options={})->
return this unless not @_rendered or options.force
data = (@model?.toHash? and @model.toHash()) or @model or {}
if not @_template?
logger.error "Default render called for #{@constructor.name} without a template"
return this
logger.verbose "#{this} rendering with data: #{data}"
@onWillRender()
$oldEl = @$el
$newEl = Backbone.$(@_template(data))
if $oldEl
$oldEl.replaceWith $newEl
$newEl.addClass $oldEl.attr 'class'
@setElement $newEl
@_rendered = true
@onDidRender()
return this
# Object Overrides #############################################################################
toString: ->
return "#{@constructor.name}(#{@cid})"
# Private Methods ##############################################################################
_loadTemplate: (templateName)->
if templateName?
@_template = views[templateName]
@@ -0,0 +1,25 @@
###
# Crafting Guide - crafting_guide_controller.coffee
#
# Copyright (c) 2014 by Redwood Labs
# All rights reserved.
###
BaseController = require './base_controller'
LandingPage = require '../models/landing_page'
RecipeCatalogController = require './recipe_catalog_controller'
########################################################################################################################
module.exports = class LandingPageController extends BaseController
constructor: (options={})->
options.model ?= new LandingPage
options.templateName = 'landing_page'
super options
# BaseController Overrides #####################################################################
onDidRender: ->
@recipeBooksController = @addChild RecipeCatalogController, '.view__recipe_catalog'
super
@@ -0,0 +1,16 @@
###
# Crafting Guide - recipe_catalog_controller.coffee
#
# Copyright (c) 2014 by Redwood Labs
# All rights reserved.
###
BaseController = require './base_controller'
########################################################################################################################
module.exports = class RecipeCatalogController extends BaseController
constructor: (options={})->
options.templateName = 'recipe_catalog'
super options