Ember.js路由加载顺序导致未定义的错误

时间:2013-07-16 16:16:54

标签: routing ember.js load-order

我有一套路线。我想在用户未经过身份验证的情况下重定向的某些路由,以及在用户经过身份验证时我想重定向的其他路由。

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

每个路由都位于我的/ routes目录中的自己的文件中。 RegistrationRoute完全按预期工作。但是,LoginRoute会抛出错误:

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

我能想到的唯一原因是LoginRoute在加载NotAuthenticatedRoute之前被解释。如果我将NotAuthenticatedRoute中的not_authenticated_route.js.coffee更改为AntiAuthenticatedRoute中的anti_authenticated_route.js.coffee,则一切正常。

我如何处理加载顺序?

我还通过将我想要继承的路由放在扩展目录中解决了这个问题,扩展目录在路由目录中的其他文件之前加载,这可能是问题的一个不错的解决方法。

1 个答案:

答案 0 :(得分:1)

假设App.NotAuthenticatedRoute中定义了not_authenticated_route.js,那么在App.LoginRoute的定义中添加一个require语句:

#= require not_authenticated_route

App.LoginRoute = App.NotAuthenticatedRoute.extend