Skip to content

Instantly share code, notes, and snippets.

@ppcano
Created March 1, 2016 13:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save ppcano/8818c985fe1d6270dd8c to your computer and use it in GitHub Desktop.
Save ppcano/8818c985fe1d6270dd8c to your computer and use it in GitHub Desktop.
Router: transitionToPrevious and intermediateTransitionToPrevious
var AppRouter = Router.extend({
previousHandlers: null,
currentHandlers: null,
transitionChanged: function() {
var previousHandlers = this.router.oldState.handlerInfos;
this.set('previousHandlers', previousHandlers);
var currentHandlers = this.router.currentHandlerInfos;
this.set('currentHandlers', currentHandlers);
}.on('didTransition'),
intermediateTransitionToPrevious: function() {
var handlers = this.get('currentHandlers');
if (!handlers || !handlers.length) { return; }
var handler = handlers[handlers.length - 1];
var args = _getModels(handlers);
args.unshift(handler.name);
//handlerName, model1, model2....
return this.intermediateTransitionTo.apply(this, args);
},
transitionToPrevious: function(errorCallback) {
var handlers = this.get('previousHandlers');
if (!handlers || !handlers.length) { return; }
var handler = handlers[handlers.length - 1];
if (handler.name === 'loading') {
if (errorCallback) { return errorCallback(); }
return;
}
var args = _getModels(handlers);
args.unshift(handler.name);
//handlerName, model1, model2....
return this.transitionTo.apply(this, args);
}
});
AppRouter.map(Routes);
var _getModels = function(handlers) {
var result = [],
length,
context,
params,
handler;
for (var i = 0; i < handlers.length; i++) {
handler = handlers[i];
params = handler.params;
length = Object.keys(params).length;
context = handler.context;
if (length && context) {
//is isNew and 1 parameter, this could be the
//route `new` pattern
if (context.get('isNew') && length === 1) {
result.push(params[Object.keys(params)[0]]);
} else {
result.push(handler.context);
}
}
}
return result;
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment