2013-07-16 57 views
1

我有一組路由。在用戶未通過身份驗證的情況下,我想要重定向的一些路由,以及在用戶身份驗證後要重定向的其他路由。Ember.js路由加載順序導致未定義錯誤

的AuthenticatedRoute情況下工作,所以我已經實現了另一種情況如下路線:

App.NotAuthenticatedRoute = Ember.Route.extend 
    beforeModel: (transition) -> 
    if App.Auth.get('signedIn') 
     return Ember.RSVP.reject(); 

    events: { 
    error: (reason, transition) -> 
     @transitionTo('home') 
    } 

App.RegistrationRoute = App.NotAuthenticatedRoute.extend 
    setupController: (controller) -> 
    controller.set('email', null) 
    controller.set('password', null) 
    controller.set('passwordConfirmation', null) 

App.LoginRoute = App.NotAuthenticatedRoute.extend 

每路是在我的/目錄航線它自己的文件。 RegistrationRoute完全按照預期工作。 LoginRoute,然而,拋出一個錯誤:

Uncaught TypeError: Cannot call method 'extend' of undefined login_route.js?body=1:2 
(anonymous function) 

我能想到這樣做的唯一原因是加載NotAuthenticatedRoute之前LoginRoute被解釋。如果我將not_authenticated_route.js.coffee中的NotAuthenticatedRoute更改爲AntiAuthenticatedRoute,anti_authenticated_route.js.coffee之類的內容,則一切正常。

我該如何處理裝貨單?

我還解決了這個問題,把我的路由從一個擴展目錄中繼承,這個目錄在路由目錄中的其他文件之前被加載,這可能是一個體面的解決方法。

+0

您使用什麼類型的構建系統,如果有的話?它接縫以相當字母順序的ASC順序加載js文件這可能是爲什麼它的工作原因,如果你改變文件名 – intuitivepixel

+0

我剛剛使用rails資產管道。我不確定目前資產配置對此問題會產生什麼樣的影響。 – DVG

+0

看一下http://guides.rubyonrails.org/asset_pipeline.html,我猜這個陳述是提供信息的:*指令是從上到下處理的,但require_tree包含文件的順序是未指定的。你不應該依賴任何特定的順序。如果您需要確保某些特定的JavaScript最終位於連接文件中的某個其他位置,請首先在清單中要求先決條件文件。請注意,require指令系列可防止文件在輸出中被包含兩次。*聲明最終將預編譯設置爲true應該有助於 – intuitivepixel

回答

1

假設App.NotAuthenticatedRoutenot_authenticated_route.js定義,那麼在你的App.LoginRoute定義添加一個需要聲明:

#= require not_authenticated_route 

App.LoginRoute = App.NotAuthenticatedRoute.extend 
相關問題