Step 1 in converting to a Backbone-based website
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user