我使用的是Ember 2.16版本,我们升级到3.8。版本升级后,我看到此错误,但无法确定错误的出处。在什么情况下会出现此错误。我看到了其中一篇:
Dynamic computed properties in Ember.JS deprecated?
但是在我的代码中找不到相同的内容。
答案 0 :(得分:1)
我想您不是逐步升级,而是直接从2.18升级到3.8,是吗?在3.2中,已弃用,如果已创建对象,则必须使用defineProperty
定义计算属性。该功能已在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的步骤更安全,更轻松。在这种情况下,您不会错过有用的弃用消息。
即使也需要研究entry in deprecation guide,所以这在技术上有点问题,我认为应该有更多真实的例子。