문제

Code is here: http://jsfiddle.net/cTpPx/, but view the live example here http://fiddle.jshell.net/cTpPx/show/, because I want you to observe the url changes.

Please disable Chrome cache when visit this page (Tick the relevant box in the built in Chrome debugger tool, and do not chose the debugger during the test)

When you open the page, you see the hastag changes to #!latest as expected, but when can.route.ready(true) gets executed, it changed back to #! empty route. Why there is such a strange behaviour?

But when you have cache for this page, it will work.

도움이 되었습니까?

해결책

I'm pretty sure this is a timing issue. You are initializing the control and set the route right away in a route change event. If you defer setting the hash, it works: http://jsfiddle.net/cTpPx/2/

var AppController = can.Control({

    'route': function(){
        log('route empty');
        setTimeout(function() {
            window.location.hash = '#!latest';
        }, 10);
    },

    'latest route': function() {
        log('route: /latest');
    }

});
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top