1

我使用的是 Ember 2.16 版,我们升级到了 3.8。版本升级后,我看到此错误,但无法弄清楚错误来自何处。在什么情况下我会收到此错误。我看到一个帖子:

Ember.JS 中的动态计算属性已弃用?

但是在我的代码中无法弄清楚。

在此处输入图像描述

4

1 回答 1

3

我猜你不是一步一步升级,而是直接从 2.18 升级到 3.8,是吗?在 3.2 中添加了一个弃用,即必须使用definePropertyif 对象已创建来定义计算属性。该功能已在 3.5 中删除。不再支持使用set传递给的对象动态设置计算属性或属性。EmberObject.create()

这已在 3.2 中弃用并在 3.5 中删除:

import Object as EmberObject, { computed } from '@ember/object';

EmberObject.create({
  foo: computed('bar', function() {
    // ...
  })
});
EmberObject.extend({
  init() {
    this._super(...arguments);

    this.set('foo', computed('bar', function() {
      //  ...
    }));
  }
});

您应该迁移到:

import Object as EmberObject, { computed } from '@ember/object';

EmberObject.extend({
  foo: computed('bar', function() {
    // ...
  })
}).create();
import { defineProperty } from '@ember/object';

EmberObject.extend({
  init() {
    this._super(...arguments);

    defineProperty(this, 'foo', computed('bar', function() {
      //  ...
    }));
  }
});

这种旧语法不是公共 API。虽然 Ember 不会对公共 API 进行重大更改,但私有 API 可能随时更改。如果核心团队认为它们被广泛使用,它们将在下一次 LTS 发布后被弃用和删除。这里就是这种情况。

通常,从 LTS 逐步升级到 LTS 会更安全、更容易。在这种情况下,您不会错过有用的弃用消息。

也请查看弃用指南中的条目,即使它有点技术性,我认为应该有更多真实世界的例子。

于 2019-06-14T08:20:52.877 回答