#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. (смотрите это)
Если у кого-то есть превосходная альтернатива, пожалуйста, прокомментируйте ниже, иначе я обновлю это, когда найду решение.