2012-07-03 104 views
0

我有一個設置了一些路由的路由器Backbone.js的如下:Backbone.js的路由器 - 與圖示路線還呼籲路線沒有圖示

routes : { 
    'a-route' : 'goToRoute', 
    'a-route/*splat' : 'goToRoute' 
} 

goToRoute : function(splat){ 
if(!splat) { 
    // do this 
} else { 
    // do that with splat 
} 

當我做了

router.navigate('a-route', {trigger : true}); 

一切正常。但是,當我做

router.navigate('a-route/more', {trigger : true}); 

路由器發射兩次:先用圖示等於「未定義」,再進行第二次的時間與圖示等於「多」。

如果我註釋掉路由'a-route':'goToRoute',那麼一切都按照router.navigate('a-route/more')的方式工作......但我需要兩個路由 - with和沒有圖示。

根據文檔,我認爲我有這個設置正確,任何想法?

+0

你已經有什麼問題了?只是從'splat === undefined'重定向到任何你想從那裏去的地方。 – jakee

+0

根據是否有splat ==='more'或splat ==='undefined'有不同的佈局。目前,調用router.navigate('a-route/more',{trigger:true})會觸發兩個路由,因此它會在同一頁面上呈現兩個佈局 – Petrov

+0

我的意思是,刪除'a-route:goToRoute'和'goToRoute'做'if(splat === undefined){justARoute(); } else {splatRoute(splat); }' – jakee

回答

0

你不需要使用*,你必須使用:在你的情況。

routes : { 
    'a-route' : 'goToRoute', 
    'a-route/:splat' : 'goToRoute' 
} 
+0

我可能是錯的,但我不認爲有一個參數和如果在反斜槓之後只有一個項目,則爲圖示。我認爲一個splat只是讓你把反斜槓後的所有東西都放到一個單獨的變量中,而每個參數代表一個組件。 – Petrov

+0

如果您嘗試粘貼您的方式,它只會輸入一次。與splat的問題是,這是一種通配符,所以你的路由器有兩個有效的條目。 –

+0

另一種可能性是你有一個對router.navigate('a-route',{trigger:true})的調用;在'a-route/* splat'上調用的函數內部 –