2013-08-05 99 views
5

試圖讓我的頭圍繞分揀此路由正則表達式的,所以:骨幹路由的正則表達式

'quotes(/:action)': 'quotes', 
'quotes/:id(/:params)': 'quotesEdit' 

兩個網址:

http://domain.com/#quotes/action=showModal 
http://domain.com/#quotes/123 

我的問題:

我怎樣才能確保action=的URL與第一個Route匹配,但不是第二個?並且像quotes/123這樣的網址可以通過轉到第二條路線?

回答

2

可以通過與您的特殊情況搭配Backbone.history.loadUrl來完成此項工作。從本質上講,你會跳過基於url參數匹配的路線......但這似乎非常黑客 - 是啊。

的選擇是聲明對參數的單一路線和分支:

'quotes(/:id)(/:params)': 'quotes' 

quotes:function(id,params) { 
    if (id && id.match(/^\d+$/)) { // if id is a number 
    this.quotesEdit(id,params); 
    } 
    else { 
    // your quotes logic 
    } 

代替上述的,你可能要考慮改變你的路線了一下,你的問題是不再是一個問題。

'quotes(/:action)'   : 'quotes', 
'quotes/edit/:id(/:params)' : 'quotesEdit' 
8

嘗試添加路由直接通過router`s初始化

initialize: function(options) { 
     this.route(/^quotes\/([0-9]+)$/, "ids"); 
     this.route(/^quotes\/action=(.*)$/, "act"); 
    }, 
    ids: function(id){ 
     alert('id='+id); 
    }, 
    act: function(act){ 
     alert('act='+act); 
    },