2013-02-25 8 views
8

Sto utilizzando Ember.js e vorrei creare un catch di tutto il percorso per inviare l'utente alla radice dell'applicazione se naviga verso un URL che non abbinare una risorsa. (Sto usando l'API storia) ho implementato questo modo:Definizione di una cattura multisegmento su tutto il percorso 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({ 

}); 

La mia domanda è: Posso definire un unico fermo tutto percorso che abbinerà qualsiasi percorso che non ha risolto a una risorsa, indipendentemente dal numero dei segmenti nel percorso?

Sto usando Ember.VERSION: 1.0.0-rc.1

risposta

21

Dopo un po 'giocherellare Credo di aver trovato una soluzione: la *: sembra fare il trucco, come

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

Ho impostato this fiddle per dimostrare come funziona.

+0

Ups, trovato un errore di copia-incolla, codice aggiornato. –

+0

Perfetto! Grazie! – i0n

+1

Questo è corretto, più o meno, ma un po 'confuso. Il ':' è il nome che stai dando alla parte catch. Piuttosto '* wildcardurl' o simile. Come quando stai facendo le cose con i parametri nella configurazione del tuo modello. –

Problemi correlati