Forked from sheehan/backbone.marionette.stackregion.coffee
Created
January 16, 2013 10:27
-
-
Save jboulhous/4546196 to your computer and use it in GitHub Desktop.
This file contains 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
class Backbone.Marionette.StackRegion extends Backbone.Marionette.Region | |
constructor: -> | |
super | |
@views = [] | |
# Return the top view (currently visible) | |
peek: -> | |
@views[@views.length - 1] if @views.length | |
# Push a view onto the stack. Previous view is hidden and the new view is shown. | |
push: (view) -> | |
@ensureEl() | |
topView = @peek() | |
@_hideView(topView) if topView | |
view.render() | |
@open view | |
@_displayView view | |
@views.push view | |
@currentView = view | |
# Pop a view from the stack. Next view is shown. | |
pop: -> | |
poppedView = @views.pop() | |
@_closeView poppedView if poppedView | |
@currentView = @peek() | |
@_displayView @currentView if @currentView | |
# Pop until the view is on top. If not found, push it onto the empty stack. | |
show: (view) -> | |
@pop() while @views.length and @peek() isnt view | |
@push view if not @views.length | |
open: (view) -> | |
@$el.append view.el | |
close: -> | |
@pop() while @views.length | |
Marionette.triggerMethod.call this, "close" | |
attachView: (view) -> | |
@views.push view | |
@currentView = view | |
_displayView: (view) -> | |
view.$el.show() | |
Marionette.triggerMethod.call view, "show" | |
Marionette.triggerMethod.call this, "show", view | |
_hideView: (view) -> | |
view.$el.hide() | |
_closeView: (view) -> | |
view.close() if view?.close and not view.isClosed |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment