首页 文章

无法升级到Ember / Ember-Data 2.0

提问于
浏览
0

我有一个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不太熟悉,我可能做错了 .

  • package.jsonember.json 中的余烬和余烬数据更改为 "~2.0.0"

  • npm uninstall ember-data

  • bower uninstall ember-data

  • bower uninstall ember

  • npm cache clear

  • bower cache clear

  • npm install

  • bower install

此时它告诉我,我已经安装了 ember-data@2.0.1ember@2.0.2

然后我运行该应用程序,并发现以下错误:

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 bracketfun-web@view:toplevel: Object

PLEASE NOTE: 此错误未收到't seem related to the deprecation, in any explanation of the deprecation that I' .

1 回答

  • 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不知道通过简单地安装add来隐式使用适配器/序列化器,你需要告诉它通过创建应用程序适配器和序列化器来使用它们 .

相关问题