Ember-Rails «Не удается прочитать свойство ‘extend’ неопределенного»

#javascript #ruby-on-rails #ember.js #precompile #ember-rails

#javascript #ruby-on-rails #ember.js #предварительная компиляция #ember-rails

Вопрос:

Я использую Ember-Rails для создания интерфейсного приложения Ember с Rails API для beckend. Я работал над внедрением аутентификации и обнаружил следующую ошибку: Cannot read property 'extend' of undefined при попытке расширить маршрут следующим образом:

 App.AdminRoute = App.AuthenticateRoute.extend({
    model: function(params) {
        return this.store.find('user', params.id);
    },
});
  

И у меня был определен AuthenticateRoute следующим образом:

 App.AuthenticateRoute = Ember.Route.extend({
    //yada yada
});
  

Я более или менее следовал руководству, найденному на: http://www.embercasts.com/episodes/client-side-authentication-part-2

Я не уверен, почему это не работает, но я заметил, что мой AuthenticateRoute может быть расширен с других маршрутов, что я нахожу чрезвычайно странным.

Ответ №1:

Оказывается, как большинство из нас знает, Ember-Rails предварительно компилирует все эти файлы так, чтобы вы этого не видели (используя то, что я считаю жемчужиной Barber). О чем я не подумал, так это о том, что, когда он объединяет все эти файлы, он (насколько я могу судить) помещает их в алфавитном порядке. Таким образом, my AdminRoute был объявлен как extending AuthenticateRoute AuthenticateRoute еще до того, как был объявлен, что привело к ошибке. Я пока не уверен, как это решить—

  • Наивное исправление состоит в том, чтобы просто изменить имя файла с admin_route.js на zadmin_route.js , чтобы оно появилось после authenticate_route.js , хотя это нежелательно по очевидным причинам.
  • В качестве альтернативы, также можно отключить предварительную компиляцию в Ember-Rails, установив флаг off. (смотрите это)

Если у кого-то есть превосходная альтернатива, пожалуйста, прокомментируйте ниже, иначе я обновлю это, когда найду решение.