From b6c8e2c63ed9cfded1628c285fd22e72f2996fb6 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Gerardy Date: Sun, 4 Dec 2016 23:25:04 +0100 Subject: [PATCH 1/4] Add an assertion for `RouteResolver.render` calls on `route.set(route.get())` --- api/tests/test-router.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/api/tests/test-router.js b/api/tests/test-router.js index 5b7ddf3e..7eb05f8a 100644 --- a/api/tests/test-router.js +++ b/api/tests/test-router.js @@ -514,21 +514,24 @@ o.spec("route", function() { o("m.route.set(m.route.get()) re-runs the resolution logic (#1180)", function(done){ var onmatch = o.spy(function(resolve) {resolve()}) + var render = o.spy(function(){return m("div")}) $window.location.href = prefix + "/" route(root, '/', { "/":{ onmatch: onmatch, - render: function(){return m("div")} + render: render } }) o(onmatch.callCount).equals(1) + o(render.callCount).equals(1) route.set(route.get()) setTimeout(function() { o(onmatch.callCount).equals(2) + o(render.callCount).equals(2) done() }, FRAME_BUDGET) From 7ee34c122d30a7809d91833783e926d34dde8f5c Mon Sep 17 00:00:00 2001 From: Pierre-Yves Gerardy Date: Sun, 4 Dec 2016 23:42:01 +0100 Subject: [PATCH 2/4] Call `RouteResolver.render` on `route.set(route.get())` --- api/router.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/router.js b/api/router.js index c5306174..12b3543b 100644 --- a/api/router.js +++ b/api/router.js @@ -27,7 +27,7 @@ module.exports = function($window, redrawService) { render(component, resolved, params, path) } component.onmatch(function(resolved) { - if (current.path !== path && current.resolve != null) current.resolve(resolved) + if (current.resolve != null) current.resolve(resolved) }, params, path) } } From 58275417d444798bee24dd1e87b55ab3f660f1f2 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Gerardy Date: Sun, 4 Dec 2016 23:48:59 +0100 Subject: [PATCH 3/4] Add test for the context of `onmatch` and `render` --- api/tests/test-router.js | 37 ++++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/api/tests/test-router.js b/api/tests/test-router.js index 7eb05f8a..e47aaef3 100644 --- a/api/tests/test-router.js +++ b/api/tests/test-router.js @@ -238,25 +238,28 @@ o.spec("route", function() { } } + var resolver = { + onmatch: function(resolve, args, requestedPath) { + matchCount++ + + o(args.id).equals("abc") + o(requestedPath).equals("/abc") + o(this).equals(resolver) + resolve(Component) + }, + render: function(vnode) { + renderCount++ + + o(vnode.attrs.id).equals("abc") + o(this).equals(resolver) + + return vnode + }, + } + $window.location.href = prefix + "/abc" route(root, "/abc", { - "/:id" : { - onmatch: function(resolve, args, requestedPath) { - matchCount++ - - o(args.id).equals("abc") - o(requestedPath).equals("/abc") - - resolve(Component) - }, - render: function(vnode) { - renderCount++ - - o(vnode.attrs.id).equals("abc") - - return vnode - }, - }, + "/:id" : resolver }) o(matchCount).equals(1) From ec9f4baa6c68f5bccae82d24a1d53def934671e3 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Gerardy Date: Sun, 4 Dec 2016 23:52:19 +0100 Subject: [PATCH 4/4] Pass the `RouteResolver` as context to `RouteResolver.render` --- api/router.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/router.js b/api/router.js index 12b3543b..26acf219 100644 --- a/api/router.js +++ b/api/router.js @@ -15,7 +15,7 @@ module.exports = function($window, redrawService) { current.component = component current.path = path current.resolve = null - redrawService.render(root, current.render(Vnode(component, undefined, params))) + redrawService.render(root, current.render.call(resolver, Vnode(component, undefined, params))) } var run = routeService.defineRoutes(routes, function(component, params, path, route, isAction) { if (component.view) render({}, component, params, path)