I’ll let others better versed in this respond, but here are my two cents. We do not at present have a solution for this, but I believe the architecture moves us in a particular direction.
For one, any anchor tag will behave normally. Navigating away from a single page app to another single page app will work normally. Capturing navigation without leaving a single page application is the more interesting story.
I hope that we will introduce the concept of a "navigate" event, with "event.data" being the fully qualified URL of the intended target. The "navigate" event would be dispatched, for example, by clicking on a "montage/ui/anchor.reel", and unless the default is prevented by an event handler up the component responder chain, the click would be permitted to be handled as normal navigation.
It would make sense to introduce a "RouteController" component that would be able to handle "navigate" events by checking whether the "event.data" target location matches a route within the application, prevent the default of the event, and then set its "state" to information gleaned from the router, parsing parameters and the query string. The application would then respond to the state change either with change observers or bindings. You could bind a Substitution to the selected route, the model to the parameters, the controller to the query. Tom Dale of Ember talks about this idea in general.
We could also introduce a much more powerful version of the Substitution, a NavigationController and Navigator view that would manage state transitions among panels, including animations.
The RouteController would handle the window.history or hashchange depending on how it is configured. Manipulating window.history makes sense for applications that have a <base> tag and a server that will serve up the application regardless of the path under the base URL. Using the window hash makes sense in other cases, especially when debugging without a specialized server.
Kris Kowal