Приложение Emberjs-1.0.0 — Uncaught TypeError: Object [object Object] не имеет метода «applyPartial»

Я использую последнюю канареечную сборку Emberjs-1.0.0 и Ember-data 1.0.0-beta-2 в приложении rails-4. Когда я использую этот jsfiddle с точным кодом в приложении emberjs из приложения rails , ошибка не возникает, но когда я запускаю приложение rails и пытаюсь перейти на индексную страницу ember-приложения, оно выдает ошибку Uncaught TypeError: Object [object Object] has no method 'applyPartial'< /сильный>

Ничто другое не упоминается, что затрудняет отладку или точное определение проблемы. Я удалил турболинки, так что это не имеет значения.

Основываясь на неперехваченном исключении, оно сводится к этой строке в файле emberjs https://github.com/emberjs/ember.js/blob/8624e8513a8db0294856cd3f559127dd7a7820b3/packages/ember-runtime/lib/system/core_object.js#L147

Class.PrototypeMixin.applyPartial(Class.prototype);

Эти скриншоты основаны на том, что приложение emberjs не загружается из приложения rails-4

введите здесь описание изображения

Снимок экрана стека вызовов, здесь показан суперкласс Store, в других случаях показан unknownMixin enter

@Jeremy вот полный список тегов, которые появляются на моей странице после рендеринга. Я получил это через просмотреть исходный код страницы. Я запустил rake tmp:clear rake assets:clean, но проблема осталась.

   <script src="/assets/jquery.js?body=1"></script>
   <script src="/assets/jquery_ujs.js?body=1"></script>
   <script src="/assets/handlebars.js?body=1"></script>
   <script src="/assets/ember.js?body=1"></script>
   <script src="/assets/ember-data.js?body=1"></script>
   <script src="/assets/application.js?body=1"></script>
   <script src="/assets/store.js?body=1"></script>
   <script src="/assets/models/users.js?body=1"></script>
   <script src="/assets/controllers/application_controller.js?body=1"></script>
   <script src="/assets/controllers/login_controller.js?body=1"></script>
   <script src="/assets/controllers/signup_controller.js?body=1"></script>
   <script src="/assets/controllers/user_controller.js?body=1"></script>
   <script src="/assets/controllers/user_edit_controller.js?body=1"></script>
   <script src="/assets/controllers/users_controller.js?body=1"></script>
   <script src="/assets/templates/application.js?body=1"></script>
   <script src="/assets/templates/index.js?body=1"></script>
   <script src="/assets/templates/login.js?body=1"></script>
   <script src="/assets/templates/signup.js?body=1"></script>
   <script src="/assets/templates/user.js?body=1"></script>
   <script src="/assets/templates/user/edit.js?body=1"></script>
   <script src="/assets/templates/user/index.js?body=1"></script>
   <script src="/assets/templates/users.js?body=1"></script>
   <script src="/assets/templates/users/index.js?body=1"></script>
   <script src="/assets/router.js?body=1"></script>
   <script src="/assets/routes/application_route.js?body=1"></script>
   <script src="/assets/routes/authenticated_route.js?body=1"></script>
   <script src="/assets/routes/login_route.js?body=1"></script>
   <script src="/assets/routes/signup_route.js?body=1"></script>
   <script src="/assets/routes/user/edit_route.js?body=1"></script>
   <script src="/assets/routes/user/index_route.js?body=1"></script>
   <script src="/assets/routes/user_route.js?body=1"></script>
   <script src="/assets/routes/users/index_route.js?body=1"></script>
   <script src="/assets/routes/users_route.js?body=1"></script>
   <script src="/assets/app.js?body=1"></script>
   <script src="/assets/lib/development/ember-data.js?body=1"></script>
  <script src="/assets/lib/development/ember.js?body=1"></script>
  <script src="/assets/lib/production/ember-data.js?body=1"></script>
  <script src="/assets/lib/production/ember.js?body=1"></script>
  <script src="/assets/note_books.js?body=1"></script>
  <script src="/assets/notes.js?body=1"></script>

person brg    schedule 19.09.2013    source источник
comment
Используете ли вы какие-либо инструменты сборки, такие как: ember-app-kit, ember-tools и т. д.? Можете ли вы показать, какова структура объекта Class.PrototypeMixin до того, как будет выдана ошибка. Вывод console.log(Class.PrototypeMixin) поможет   -  person Marcio Junior    schedule 19.09.2013
comment
Спасибо, и нет, я не использую никаких инструментов сборки. Этот emberjs загружен с emberjs.com/builds Class.PrototypeMixin — это фреймворк emberjs. Моя система не работает, но когда она вернется, я попробую посмотреть, смогу ли я войти в консоль. Тем временем в вопросе есть ссылка на источник Class.PrototypeMixin.   -  person brg    schedule 19.09.2013
comment
Вы уверены, что не используете инструменты сборки? Rails 4 по умолчанию использует конвейер ресурсов, который является инструментом сборки. Можете ли вы опубликовать полный список тегов <script> на своей странице в том порядке, в котором они появляются в вашем приложении после рендеринга?   -  person Jeremy Green    schedule 11.10.2013
comment
@jeremy спасибо, что заглянули. Я добавил тег сценария полного списка, который появляется после рендеринга, в конец моего вопроса, так как он слишком длинный для добавления в этот раздел комментариев. Я не думаю, что добавлял какой-либо инструмент сборки, кроме звездочек по умолчанию или конвейера активов, который поставляется с рельсами, в моем манифесте приложения rails нет другого инструмента сборки, и я создал все файлы и папки emberjs вручную, не используя какой-либо генератор. Я не использую генераторы, предоставляемые ember-rails. Единственным внешним javascript в библиотеке или фреймворке в моем приложении на данный момент являются jquery, emberjs и ember-data.   -  person brg    schedule 11.10.2013


Ответы (1)


Поскольку у вас есть ember-rails в Gemfile, вы, вероятно, получаете версию Ember, которую он предоставляет, а не ту, которая находится в app/assets/javascripts/lib/development. Вы можете загрузить /assets/ember.js в свой браузер для проверки. Если вы хотите убедиться, что получили свою пользовательскую версию, используйте ее в application.js.

//= require lib/development/ember

В качестве альтернативы, чтобы быть более уверенным, вы можете полностью удалить ember из application.js и включить последний canary ember прямо в свой макет.

<script type='text/javascript' src="http://builds.emberjs.com/canary/ember.js"></script>

[ОБНОВЛЕНИЕ]: Хорошо, проблема в том, что вы включаете ember.js несколько раз (и, возможно, с несколькими версиями). Я пропустил это, когда вы впервые разместили свой битовый список тегов script, но если вы посмотрите внимательно, вы увидите, что Ember и Ember Data включены вверху (строки 4 и 5 скриптов), а затем они каждый включал еще два раза внизу.

...
<script src="/assets/ember.js?body=1"></script>
<script src="/assets/ember-data.js?body=1"></script>
...
<script src="/assets/lib/development/ember-data.js?body=1"></script>
<script src="/assets/lib/development/ember.js?body=1"></script>
<script src="/assets/lib/production/ember-data.js?body=1"></script>
<script src="/assets/lib/production/ember.js?body=1"></script>
...

Я предполагаю, что application.js намеренно требует ember с

//= require ember

А потом его снова поднимают с require_tree

//= require_tree .

Обычно вы хотите хранить внешние библиотеки (код, который вы лично не поддерживаете) в каталоге vendor вашего приложения. Это позволит по-прежнему использовать require_tree, чтобы включить весь ваш собственный javascript в один снимок. В моем проекте, который использует ember-rails, моя структура выглядит так:

app
  assets
    javascripts
      # All my own stuff goes here
vendor
  assets
    ember
      development
        ember.js
        ember-data.js
      production
        ember.js
        ember-data.js

ember-rails найдет версии в vendor, если вы просто используете require ember в application.js. Вы должны убедиться, что вы установили config.ember.variant в каждом из ваших config/environments/*.rb файлов. Например, в config/environments/development.rb вам нужно добавить это:

config.ember.variant = :development
person Jeremy Green    schedule 12.10.2013
comment
Спасибо, Джереми, я переключился между использованием //= require ember и //= require ./lib/development/ember и сделал то же самое для ember-data. Первоначальная ошибка все еще возникает, но, кроме того, когда я использую //= ./lib/development/ember/, возникают дополнительные ошибки, показанные здесь i.imgur.com/3ToLsUW.png. Такие ошибки, как Ошибка утверждения: "хранилище" инициализатора уже зарегистрировано. Утверждение не выполнено: «преобразование» инициализатора уже зарегистрировано. Ошибка утверждения: инициализатор 'dataAdapter' уже зарегистрирован - person brg; 12.10.2013
comment
ОК, см. [ОБНОВЛЕНИЕ], которое я только что добавил к своему исходному ответу. - person Jeremy Green; 12.10.2013
comment
Спасибо за время, которое вы потратили на помощь. Около 2 часов назад я переместил его в ресурсы vendor, как вы описали выше, и, поскольку я работаю на Rails 4, он загружался автоматически, я потратил некоторое время на чтение различных предложений о том, как создавать файлы ресурсов. в vendor для автоматического выбора, ни один из них не работал, поэтому я переместил их обратно в javascripts/lib. - person brg; 12.10.2013
comment
Спасибо за помощь. Наконец-то я заработал после вашего обновленного ответа. - person brg; 12.10.2013
comment
Здорово! Рад, что смог помочь. - person Jeremy Green; 12.10.2013