2013-08-05 6 views
5

Der Versuch, meinen Kopf um das Sortieren dieser Routing-regex aus, so:Backbone-Routing regex

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

Zwei URLs:

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

Meine Frage:

Wie kann ich sicherstellen, dass die URL mit den action= Treffern auf der ersten Route, aber nicht die zweite? und für URLs wie quotes/123 bis zur zweiten Route fallen?

Antwort

2

Sie können machen diese Arbeit durch Überfahren Backbone.history.loadUrl mit Ihren Spezialfällen. Im Wesentlichen würden Sie übereinstimmende Routen basierend auf den URL-Parametern überspringen ... aber das scheint schrecklich hack-ish.

Eine Option ist eine einzige Route und Zweig auf die Argumente zu erklären:

'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 
    } 

Anstelle der oben genannten, Sie können in Ändern Sie Ihre Routen etwas zu sehen und Ihr Problem ist Thema mehr.

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

try Routen hinzufügen direkt über router`s initialisieren

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); 
    },