2016-01-07 6 views
0

У меня есть проект ember-cli, и я пытаюсь добраться до ember 2.0. Я знаю, что идея заключается в том, чтобы удалить все предупреждения устаревания перед обновлением, но я не знаю, что делать этого:Устранение неисправностей до Ember/Ember-Data 2.0

DEPRECATION: The default behavior of shouldReloadAll will change in Ember Data 2.0 
to always return false when there is at least one "foo" record in the store. 
If you would like to preserve the current behavior please override shouldReloadAll 
in your adapter:application and return true. 
[deprecation id: ds.adapter.should-reload-all-default-behavior] 

Это предупреждение связано с вызовом, который я делаю для this.store.findAll('foo'), например.

Насколько я могу судить, исправление этого будет связано с изменением поведения либо ember-data, либо ember-django-adapter.

Вот мой (частично) package.json:

{ 
    "name": "my-app", 
    "private": true, 
    "devDependencies": { 
    "ember-cli": "1.13.13", 
    "ember-data": "1.13.15", 
    "ember-django-adapter": "^1.1.1", 
    } 
} 

Вот некоторые из моих bower.json:

{ 
    "name": "my-app", 
    "dependencies": { 
    "ember": "1.13.11", 
    "ember-data": "1.13.15", 
    "ember-resolver": "~0.1.20", 
    } 
} 

Итак, после прочтения немного, я подумал, что я могу просто проигнорировать это предупреждение , и, возможно, поведение shouldReloadAll не так важно для моего приложения.

Я буду перечислять свои шаги тщательно, потому что я не очень хорошо знаком с npm или беседкой, и я вполне могу делать что-то неправильно.

  1. Изменение уголек и уголек-данных "~2.0.0" везде, где они встречаются в package.json и ember.json
  2. npm uninstall ember-data
  3. bower uninstall ember-data
  4. bower uninstall ember
  5. npm cache clear
  6. bower cache clear
  7. npm install
  8. bower install

На данный момент он говорит мне, что я установил [email protected] и [email protected]

Я затем запустить приложение, и найти следующее сообщение об ошибке:

TypeError: str.replace is not a function 
    at Object.func (ember.debug.js:35278) 
    at Object.Cache.get (ember.debug.js:12867) 
    at decamelize (ember.debug.js:35320) 
    at Object.func (ember.debug.js:35235) 
    at Object.Cache.get (ember.debug.js:12867) 
    at Object.dasherize (ember.debug.js:35324) 
    at ember$data$lib$system$normalize$model$name$$normalizeModelName (normalize-model-name.js:13) 
    at ember$data$lib$serializers$json$serializer$$default.extend.modelNameFromPayloadKey (rest-serializer.js:426) 
    at ember$data$lib$serializers$json$serializer$$default.extend._normalizePolymorphicRecord (rest-serializer.js:161) 
    at rest-serializer.js:141onerrorDefault @ ember.debug.js:29661exports.default.trigger @ ember.debug.js:51067(anonymous function) @ ember.debug.js:52059Queue.invoke @ ember.debug.js:978Queue.flush @ ember.debug.js:1042DeferredActionQueues.flush @ ember.debug.js:838Backburner.end @ ember.debug.js:166Backburner.run @ ember.debug.js:288run @ ember.debug.js:19125hash.success @ rest-adapter.js:735fire @ jquery.js:3148self.fireWith @ jquery.js:3260done @ jquery.js:9314callback @ jquery.js:9718 

Следующая версии:

DEBUG: ------------------------------- 
vendor.js:15777 DEBUG: Ember  : 2.0.2 
vendor.js:15777 DEBUG: Ember Data : 2.0.1 
vendor.js:15777 DEBUG: jQuery  : 1.11.3 
vendor.js:15777 DEBUG: ------------------------------- 
vendor.js:19380 Rendering application with [email protected]:toplevel: Object 

ПОЖАЛУЙСТА, ОБРАТИТЕ ВНИМАНИЕ: Эта ошибка, похоже, не связана с устаревшей информацией, в любом объяснении полученной мной устаревания.

+0

Возможный дубликат: [DEPRECATION: поведение по умолчанию для shouldReloadAll будет изменяться в Ember Data 2.0, чтобы всегда возвращать значение false, когда есть хотя бы один] (http://stackoverflow.com/questions/31016676/deprecation-the-default- поведение-of-shouldreloadall-will-change-in-ember-data-2) – nem035

+0

Пробовал ли вы просто делать то, что он сказал? Просто переопределите метод 'shouldReloadAll()' в вашем адаптере приложения (который расширит адаптер Django) и просто вернет true. Причина изменения заключается в том, что результаты кэшируются и могут быть явно перезагружены с помощью 'this.store.findAll ('foo', {reload: true})'. – uberclops

+0

@uberclops Думаю, я не понимаю, как это сделать. Я не думал, что у меня есть адаптер-адаптер. Не могли бы вы объяснить мне, как именно я переоценил бы этот метод? –

ответ

2

Вам необходимо создать свой прикладной адаптер, используя ember generate drf-adapter application из командной строки. Это должно создать файл app/adapters/application.js, к которому вы будете добавлять переопределение из shouldReloadAll(), и конечный результат должен выглядеть примерно так:

import DRFAdapter from './drf'; 

export default DRFAdapter.extend({ 
    shouldReloadAll() { 
     return true; 
    } 
}); 

EDIT:replace ошибку.

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

Вы можете сгенерировать сериализатор, используя ember generate drf-serializer application. Это создаст файл app/serializers/application.js.

Помните, что Ember не знает, чтобы неявно использовать адаптер/сериализатор, просто установив добавление, вам нужно сказать ему, чтобы использовать их, создав адаптер приложения и сериализатор.

+0

Это выглядит потенциально полезным. Можете ли вы рассказать мне, как вы смогли это узнать? Детали, подобные 'drf-adapter', - это вещи, которые меня не угадывают, поэтому я либо не согласен, либо правильно размещен в документации. –

+1

@ EricWilson это правильный ответ, если вы действительно хотите, чтобы hasReloadAll возвращал true (я не в моем проекте). shouldReloadAll - это директива Ember Data, которая информирует ED, если она должна совершать последующие вызовы в ваш API, если в хранилище уже есть записи. shouldReloadAll используется для возврата true по умолчанию (API-адрес для каждого запроса store.findAll). Начиная с версии 2.0 он возвращает false по умолчанию (один API попадает в первый запрос store.findAll, а затем полагается на кеш-хранилище, идущий вперёд) - после «устаревания». http://emberjs.com/api/data/classes/DS.RESTAdapter.html#method_shouldReloadAll – dustinfarris

+0

@dustinfarris Я думал, что это была идея устаревания, но это все еще озадачивает меня, почему это вызвало ошибку. Опираясь на кеш или нет, не должно возникать ошибка в отношении 'str.replace', связанного с' normalizeModelName', если он? Кажется, худшее, что я должен ожидать, было бы устаревшим результатом, в определенных сценариях, правильно? –

Смежные вопросы