无法升级到Ember / Ember-Data 2.0

时间:2016-01-07 03:28:34

标签: ember.js ember-data ember-cli

我有一个ember-cli项目,我正试图使用​​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-dataember-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或bower不是很熟悉,而且我可能做错了。

  1. 将ember和ember-data更改为"~2.0.0" package.jsonember.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
  9. ember-data@2.0.1
  10. 此时它告诉我已安装ember@2.0.2TypeError: 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 bracketfun-web@view:toplevel: Object
    

    报告了以下版本:

    install updates

    请注意:在我收到的任何弃用说明中,此错误似乎与弃用无关。

1 个答案:

答案 0 :(得分:2)

您需要使用命令行中的ember generate drf-adapter application创建应用程序适配器。这应创建文件app/adapters/application.js,您将添加shouldReloadAll()的覆盖,最终结果应如下所示:

import DRFAdapter from './drf';

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

编辑: replace错误。

如果您查看堆栈跟踪并查看错误的来源,您将看到它来自序列化程序。它正在努力从有效载荷中获取模型名称。这很可能是因为您尚未设置应用程序序列化程序。

您可以使用ember generate drf-serializer application生成序列化程序。这将创建文件app/serializers/application.js

请记住Ember不知道通过简单地安装add来隐式使用适配器/序列化器,您需要通过创建应用程序适配器和序列化器来告诉它使用它们。