试图让我的头脑整理出这个路由正则表达式,所以:
'quotes(/:action)': 'quotes',
'quotes/:id(/:params)': 'quotesEdit'
两个网址:
http://domain.com/#quotes/action=showModal
http://domain.com/#quotes/123
我的问题:
如何确保与action=第一个路由匹配的 URL,而不是第二个?quotes/123对于喜欢落入第二条路线的网址?
试图让我的头脑整理出这个路由正则表达式,所以:
'quotes(/:action)': 'quotes',
'quotes/:id(/:params)': 'quotesEdit'
两个网址:
http://domain.com/#quotes/action=showModal
http://domain.com/#quotes/123
我的问题:
如何确保与action=第一个路由匹配的 URL,而不是第二个?quotes/123对于喜欢落入第二条路线的网址?
尝试通过路由器的初始化直接添加路由
    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);
    },
您可以通过覆盖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'