2013-04-30 88 views
0

代碼在這裏:http://jsfiddle.net/cTpPx/,但在這裏查看生活的例子http://fiddle.jshell.net/cTpPx/show/,因爲我想讓你觀察URL的變化。當can.route.ready(true)執行

請禁用瀏覽器緩存時訪問此頁面(勾選相關框內置在Chrome調試工具,而不要選擇在測試過程中的調試器)當你打開網頁,看到hastag變化

如預期的那樣爲#!latest,但是當can.route.ready(true)得到執行時,它將回到#!空路線。 爲什麼有這樣一個奇怪的行爲?

但是,當你有這個頁面的緩存,它會工作。

回答

2

我很確定這是一個計時問題。您正在初始化控制並在路線更改事件中立即設置路線。如果選擇延遲設置散列,它的工作原理: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'); 
    } 

}); 
+0

我upvoting這是因爲一個小時後,這是救了我從扔我的筆記本電腦窗外的唯一的事。我在11樓,因此它會死得很快,我也想這樣做。 – 2013-08-19 15:50:52