diff --git a/api/router.js b/api/router.js index 1eace6b0..04b5d091 100644 --- a/api/router.js +++ b/api/router.js @@ -8,37 +8,31 @@ module.exports = function($window, redrawService) { var routeService = coreRouter($window) var identity = function(v) {return v} - var resolver, component, attrs, currentPath, resolve + var render, component, attrs, currentPath var route = function(root, defaultRoute, routes) { if (root == null) throw new Error("Ensure the DOM element that was passed to `m.route` is not undefined") var update = function(routeResolver, comp, params, path) { - resolver = routeResolver, component = comp, attrs = params, currentPath = path, resolve = null - resolver.render = routeResolver.render || identity - render() + component = comp || "div", attrs = params, currentPath = path + render = (routeResolver.render || identity).bind(routeResolver) + run() } - var render = function() { - if (resolver != null) redrawService.render(root, resolver.render(Vnode(component || "div", attrs.key, attrs))) + var run = function() { + if (render != null) redrawService.render(root, render(Vnode(component, attrs.key, attrs))) } routeService.defineRoutes(routes, function(payload, params, path) { if (payload.view) update({}, payload, params, path) else { if (payload.onmatch) { - if (resolve != null) update(payload, component, params, path) - else { - resolve = function(resolved) { - update(payload, resolved, params, path) - } - Promise.resolve(payload.onmatch(params, path)).then(function(resolved) { - if (resolve != null) resolve(resolved) - }) - } + Promise.resolve(payload.onmatch(params, path)).then(function(resolved) { + update(payload, resolved, params, path) + }) } else update(payload, "div", params, path) } }, function() { routeService.setPath(defaultRoute) }) - redrawService.subscribe(root, render) + redrawService.subscribe(root, run) } route.set = routeService.setPath route.get = function() {return currentPath}