2012-09-01 68 views
0

32,我想Backbone.Router比如像「#/設置」和「#/設置/隱私」Backbone.Router接受查詢和路徑

hashbangs監聽目前我處理這個問題是這樣的:

var Router = Backbone.Router.extend({ 

    routes: { 
     "settings": "settings", 
     "settings/:query": "settings" 
    }, 

    settings: function(query) { 
     // do the routing 
    } 

}); 

我現在想只用一條路線完成整個工作。不幸的是'設置/:查詢'只會允許'設置/'

任何一個想法如何處理?

Regards

回答

1

您在這裏有一些選項。如果你感到快樂與像#settings/路線(注意最後的斜槓)和#settings/privacy,那麼你可以使用這個:

routes: { 
    'settings/*query': 'settings' 
} 

演示:http://jsfiddle.net/ambiguous/m7ufD/

這不會只#settings的工作,雖然,最終的斜線對於該路線起作用是必需的。

如果你沒有像#settings-something-else的任何路由,那麼你可以這樣做:

routes: { 
    'settings*query': 'settings' 
} 

演示:http://jsfiddle.net/ambiguous/MudaG/

這也將匹配之類的東西#settingsandstuff,它會離開斜線的路由處理程序的參數(即函數將得到'/privacy'而不是僅僅'privacy')。

最靈活的選擇是直接與一個正則表達式使用route,那麼你可以用一個單一的路由匹配#settings#settings/privacy沒有以上任何一個問題:

// No routes, do it in initialize instead 
initialize: function() { 
    this.route(/^settings(?:\/(.*)|)$/, 'settings'); 
} 

演示:http://jsfiddle.net/ambiguous/XGrQz/

那將不會與#settings-and-stuff匹配,並且它不會在#settings/privacy的函數參數中包含前導斜槓。