2015-10-22 7 views
7

Oto moja konstrukcja w środku àpp/pods:ember.js - Błąd Zjednoczone w strukturze Pod

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

Gdy wystąpi błąd, Ember nie ładuje trasę error. Zamiast tego próbuje załadować pod-trasę, taką jak index_error lub user_error, ale te nie istnieją.

Jak zmusić Ember do załadowania trasy głównej error przy jakimkolwiek błędzie?

Ember v2.1 Ember-Cli v1.13.8

Odpowiedz

1

Struktura, którą podałeś, powinna faktycznie zrobić dokładnie to, o czym mówisz.

Proszę spojrzeć na this twiddle, aby zobaczyć przykład. Kliknięcie przycisku "Wyświetl użytkownika" spowoduje przejście do trasy user.view, ale kliknięcie przycisku "Edytuj użytkownika" spowoduje zgłoszenie wyjątku na trasie user.edit, a zamiast tego wyląduje na trasie error.

Należy pamiętać, że użytkownik nie powinien dodać trasy błędu samodzielnie w router.js. Otrzymuje błąd przejścia jako swój model, więc jeśli ręcznie wykonasz this.route('error') i nie otrzymasz segmentu dynamicznego, przejście nie powiedzie się.


Jeśli chcesz mieć większą kontrolę nad tym, co dokładnie dzieje, gdy wystąpi błąd podczas dowolny przejściowym, można wdrożyć działania error na trasie aplikacji.

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

Można zobaczyć pełną przykładem takiego układu w this twiddle. Zauważ, że jest to subtelnie odmienne od default error behavior, ponieważ spowoduje całkowite przejście (tzn. URL zostanie zaktualizowany), a nie tylko przejście do podstanu.

+0

Cóż, twoja odpowiedź nie rozwiązała problemu w mojej aplikacji, ale udowodniłeś, że to powinno. +50 – medokin

2

udało mi się pokazać drogę błędu wewnątrz struktury pod jak następuje:

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

Jeśli rzucę błąd na coś /route.js tak:

export default Ember.Route.extend({ 

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

}); 

i mają error/template.hbs z treścią:

Arrrh, errror!!!! 

Wyświetla komunikat o błędzie.

Jeśli chciał trasy błąd sub something myślę, że potrzebne są następujące elementy:

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