2012-04-13 9 views
0

Ich habe derzeit ein Routen-Objekt, das mehrere reguläre Seiten hat, und möchte auch eine Top-Level-Route hinzufügen, in der der erste Parameter ein Benutzername ist.Backbone.js Router dynamisch ersten Parameter

routes : { 
    '/'  : 'main', 
    '/login' : 'login', 
    '/about' : 'about', 
    '/create' : 'create', 
    '/:username': 'getUser' //something like this 
    '*actions' : 'defaultHandler' 
} 
  1. , wie ich dies erreichen würde?
  2. wäre es ein schlechtes design, die username route hinzuzufügen und gleichzeitig auf aktionen zurückzugreifen, wenn keine seite oder user gefunden wird?

Antwort

1

Was passiert, wenn Sie einen Benutzer namens "about" oder "create" haben? Namespace Ihre Routen und vermeiden das Problem:

routes : { 
    '/'   : 'main', 
    '/a/login' : 'login', // "a" for "application" 
    '/a/about' : 'about', 
    '/a/create' : 'create', 
    '/a/*actions': 'defaultHandler', 
    '/:username' : 'getUser' 
} 

Dann müssen Sie nur noch sicherstellen, dass niemand hat „a“ als Benutzernamen ein. Dieser Ansatz schützt Sie auch vor zukünftigen Konflikten, wenn Sie weitere Routen hinzufügen.

1

Wenn ich dich richtig verstehe, bist du da. Fügen Sie einfach username als Parameter Ihrer getUser Funktion:

getUser: function(username) { /* do stuff */ } 

ist es ein Problem, obwohl, weil Ihre letzten beiden Strecken beide so ziemlich alles bieten kann. Um Benutzer zu identifizieren, können Sie ein Präfix verwenden, um Benutzerrouten von allem zu unterscheiden, das Ihrem letzten Splat entspricht. So etwas sollte ausreichen:

routes : { 
    // ... 
    '/users/:username': 'getUser' 
}