Backbone.js Router Passende Optionale Parameter
Ich versuche zu schaffen, einen backbone-router, die sich mit optionalen Parametern.
Betrachten Sie den folgenden code:
routes: {
'/jobs' : 'jobs',
'/jobs/p:page' : 'jobs',
'/jobs/job/:job_id' : 'jobs',
'/jobs/p:page/job/:job_id' : 'jobs'
}
jobs: function(page, job_id){
//do stuff here ....
}
Wenn ich navigieren Sie zu der URL abc.com/#/jobs/p104/ die Seite parameter werden 104. Allerdings, wenn Sie navigieren Sie zu abc.com/#/jobs/job/93, die job_id parameter ist undefined aber die Seite parameter ist 93.
So Backbone-router entspricht grundsätzlich der Routen hash-Parameter nach Reihenfolge und nicht nach Namen.
Ich weiß die Lösung: benutzen Sie ein *splat und teilen Sie die Parameter mit regex, aber ich kann nicht scheinen, um die regex-Teil zu arbeiten (meine regex ist ziemlich rostig). Kann mir bitte jemand helfen?
Wenn es eine bessere Lösung gibt, als mit *splat, kann mir bitte jemand teilen?
- Rückgrat 0.9.9, optionale Parameter mit (). Für Beispiel - /jobs(/p -: Seite)(/job,/: job_id)
- keine Ahnung, wie zu behandeln optionale Parameter Ihrer route-handling-Funktionen?
- was meinst du? Hinzufügen Ihrer Namen als Parameter der Funktion sollte den trick tun
Du musst angemeldet sein, um einen Kommentar abzugeben.
Anstelle von messing mit regexes, es wäre einfacher und weniger fehleranfällig, nur um eine zweite Funktion. Sie werden wahrscheinlich haben, um bindAll diese in eine initialize-Funktion für diese.jobs zu arbeiten.
versuchen, diese (einzigen regex funktioniert auf alle Ihre input-Formate)
**entspricht zunächst der pNNN segment, wenn es da ist, und verwendet ein nicht gieriger Quantifizierer mit dot
.
können alles Essen, was.*?
zu kriechen, bis der string durch ist, so dass die zweite Gruppe (gerade /NNN), wird auch übereinstimmen, wenn vorhanden. die(?: exp )
sind non-capturing-groups, Sie Gruppe, aber Sie nicht "merken" nichts.Wenn du gehst zu tun eine Menge von diesen, könnten Sie Blick auf dieses Muster für das einwickeln von Ihnen bis ordentlich. Nur für diese, obwohl die folgenden regexs sollte es tun:
Dann können Sie
String.match
mit den hinweisfeldern Sie abzurufen, zu extrahieren Sie die url-Fragmente in Frage. Die Verwendung von Zeichenfolgen in Ort einersplat
variable:String.match()
-- werde ich update meine Antwort.