2013-02-25 7 views
8

Ich benutze Ember.js und ich möchte eine catch all Route erstellen, um den Benutzer zurück zum Stamm der Anwendung zu senden, wenn sie zu einer URL navigieren, die nicht eine Ressource zuordnen (Ich verwende die Geschichte API) Ich habe dies umgesetzt wie so:Definieren einer multi segmentierten Catch alle Route in ember.js

App.Router.map(function() { 
    this.resource('things', function() { 
     this.resource('thing', {path:':thing_id'}); 
    }); 
    this.route('catchAll', { path: ':*' }); 
    this.route('catchAll', { path: ':*/:*' }); 
    this.route('catchAll', { path: ':*/:*/:*' }); 
}); 

App.Router.reopen({ 
    location: 'history' 
}); 

App.CatchAllRoute = Ember.Route.extend({ 
    redirect: function() { 
     this.transitionTo('index'); 
    } 
}); 

App.IndexRoute = Ember.Route.extend({ 

}); 

Meine Frage ist: Kann ich definiere eine einzelne catch all Route, die jeden Pfad übereinstimmen, die auf eine Ressource nicht aufgelöst hat, unabhängig von der Zahl von Segmenten im Pfad?

Ich verwende Ember.VERSION: 1.0.0-rc.1

Antwort

21

Nach einiger Fummelei ich denke, ich eine Lösung gefunden habe: die *: scheint der Trick zu tun, wie

this.route('catchAll', { path: '*:' }); 

Ich habe this fiddle eingerichtet, um zu demonstrieren, wie es funktioniert.

+0

Ups, fand einen Copy-Paste-Fehler, Code aktualisiert. –

+0

Perfekt! Vielen Dank! – i0n

+1

Das ist mehr oder weniger richtig, aber ein bisschen verwirrend. Das ':' ist der Name, den Sie dem Fang alles geben. Eher "Wildcardurl" oder ähnliches. Wie wenn Sie Dinge mit den Parametern in Ihrem Modell Setup tun. –

Verwandte Themen