Last active
December 12, 2015 12:39
-
-
Save yocontra/4773445 to your computer and use it in GitHub Desktop.
Backbone layout manager
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
FooterV = SomeViewInstance; | |
MainV = SomeViewInstace; | |
MyLayout = Backbone.Layout.extend({ | |
template: function(){ | |
// this can be any js function that returns html or a jquery el | |
return "<div id='sidebar'/><div id='main'/><div id='footer'/>"; | |
}, | |
// Define friendly names for regions | |
regions: { | |
"sidebar": "#sidebar", | |
"content": "#content", | |
"footer": "#footer" | |
}, | |
// Define any default region views | |
views: { | |
"footer": FooterV | |
} | |
}); | |
sickLayout = new MyLayout | |
$("body").html(sickLayout.render().el) | |
// show will call clear on any views already in the region | |
// then put view.render().el in it | |
sickLayout.set("content", MainV).show("content") | |
// clear will call close on the view and empty the region | |
sickLayout.clear("content") | |
// get will get the view currently in a region | |
sickLayout.get("content").doSomething() |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
define -> | |
# extend backbone | |
class Backbone.Layout extends Backbone.View | |
$regions: {} | |
_regions: {} | |
render: -> | |
@$el.empty() | |
if @template? | |
@$el.append @template arguments... | |
@$set name, select for own name, select of @regions | |
if @views? | |
@set name, v for own name, v of @views | |
@trigger "render", @ | |
return @ | |
$set: (name, selector) => @$regions[name] = @$ selector | |
$get: (name) => @$regions[name] | |
get: (name) => @_regions[name] | |
set: (name, nu) => | |
throw new Error "Invalid region" unless @$regions[name] | |
@clear name | |
@_regions[name] = nu | |
@trigger "change:#{name}", nu | |
@trigger "change", name, nu | |
return @ | |
show: (name, a...) => | |
throw new Error "Invalid region" unless @$regions[name] | |
throw new Error "Region not set to a view" unless @_regions[name] | |
vu = @_regions[name] | |
vu.setElement vu.el | |
@$regions[name].html vu.render(a...).el | |
@trigger "show:#{name}" | |
@trigger "show", name | |
return @ | |
clear: (name) => | |
@_regions[name]?.close?() | |
@$regions[name]?.empty() | |
@trigger "clear:#{name}" | |
@trigger "clear", name | |
return @ | |
_.extend Backbone.Layout | |
return Backbone |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment