2015-10-22 11 views
7

Qui è la mia struttura in all'interno àpp/pods:Ember.js - Errore Uniti nella struttura Pod

|-application 
|-index 
|-error 
|-user 
||-index 
||-view 
||-edit 

Quando si verifica un errore, brace non carica il percorso error. Cerca invece di caricare un percorso secondario come index_error o user_error ma questi non esistono.

Come faccio a forzare Ember per caricare il percorso radice error in caso di errore?

Ember v2.1 Ember-Cli v1.13.8

risposta

1

La struttura che hai fornito dovrebbe effettivamente fare esattamente quello che stai descrivendo.

Dai un'occhiata a this twiddle per vedere un esempio. Facendo clic su "Visualizza utente" si passerà alla rotta user.view, ma facendo clic su "Modifica utente" si solleverà un'eccezione nella rotta user.edit e invece si sbarcherà sulla rotta error.

Una cosa da notare è che non si deve aggiungere il percorso di errore in router.js. Riceve l'errore di transizione come modello, quindi se fai manualmente this.route('error') e non gli dai un segmento dinamico, la transizione fallirà.


Se si desidera un maggiore controllo sulla esattamente ciò che accade quando si verifica un errore durante qualsiasi transizione, è possibile implementare l'azione error lungo il percorso dell'applicazione.

actions: { 
    error(thrownError) { 
    this.transitionTo('my-error-route'); // Or whatever other handling you want 
    } 
} 

Si può vedere un esempio completo di un tale accordo in this twiddle. Si noti che questo è leggermente diverso da default error behavior in quanto produrrà una transizione completa (ad esempio l'URL verrà aggiornato) anziché spostarsi semplicemente in un substate.

+0

Bene, la tua risposta non ha risolto il problema nella mia domanda, ma hai dimostrato che è necessario. +50 – medokin

2

sono riuscito a mostrare un percorso di errore all'interno di una struttura di pod come la seguente:

-app 
--pods 
----something 
------template.hbs 
------route.js 
----error 
------template.hbs 

Se mi passi un errore su qualcosa /route.js come la seguente:

export default Ember.Route.extend({ 

    model() { 
    throw new Error('AAA'); 
} 

}); 

E hanno il error/template.hbs con il contenuto:

Arrrh, errror!!!! 

Viene visualizzato il messaggio di errore.

Se si voleva un percorso errore di sub per something penso che si avrebbe bisogno il seguente:

-app 
--pods 
----something 
------template.hbs 
------route.js 
------error 
--------template.hbs 
----error 
------template.hbs