code: function render() {
  	debug('render `%s`', this.toString());
  	var self = this;
  
  	function invokeBeforeRender() {
  		debug('invoke before render `%s`', self.toString());
  		var deferBeforeRender = Q.defer()
  			, resolve = deferBeforeRender.resolve
  			, reject = deferBeforeRender.reject;
  
  		if(!_.isUndefined(self.beforeRender)) {
  			self.beforeRender(resolve, reject);
  		} else {
  			resolve();
  		}
  
  		return deferBeforeRender.promise;
  	}
  
  	function invokeRender() {
  		debug('invoke render `%s`', self.toString());
  		if(!_.isUndefined(self.renderView)) {
  			self.renderView();
  		}
  	}
  
  	function invokeAfterRender() {
  		debug('invoke after render `%s`', self.toString());
  		var deferAfterRender = Q.defer()
  			, resolve = deferAfterRender.resolve
  			, reject = deferAfterRender.reject;
  
  		if(!_.isUndefined(self.afterRender)) {
  			self.afterRender(resolve, reject);
  		} else {
  			resolve();
  		}
  
  		return deferAfterRender.promise;
  	}
  
  	return invokeBeforeRender()
  		.then(invokeRender)
  		.then(invokeAfterRender)
  		.then(self.renderSubviews.bind(self));
  }
docs: Function: render
  Overwrites the default Backbone.View.render method. It automatically
  invokes "renderView" and <renderSubviews>.
  
  If you define a beforeRender or afterRender function in your <View>
  implementation, that function will be called before / after the actual
  rendering takes / took place.
  
  Attention:
  * Do *not* overwrite this method as you are used to from "normal" Backbone
  view implementations. Create a *renderView* method in your view instead!
  * Make sure you implement a renderView() function for your concrete
  view.
  
  See also:
  * <renderSubviews>