Ember:断言失败:EmberObject.create 不再支持定义计算属性
Ember: Assertion Failed: EmberObject.create no longer supports defining computed properties
我使用的是 Ember 版本 2.16,我们升级到了 3.8。版本升级后,我看到了这个错误,但无法找出错误的来源。在什么情况下我会得到这个错误。我看到了其中一个 post:
Dynamic computed properties in Ember.JS deprecated?
但在我的代码中无法弄清楚。
我猜你不是一步步升级而是直接从2.18升级到3.8吧?在 3.2 中添加了弃用,即如果对象已创建,则必须使用 defineProperty
定义计算属性。该功能已在 3.5 中删除。不再支持在传递给 EmberObject.create()
的对象上使用 set
或 属性 动态设置计算 属性。
这已在 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() {
// ...
}));
}
});
这个旧语法不是 public API。虽然 Ember 不会对 public API 进行重大更改,但私有 API 可能随时更改。如果核心团队认为它们被广泛使用,它们将在下一个 LTS 版本后被弃用和删除。这里就是这种情况。
通常情况下,从 LTS 逐步升级到 LTS 更安全、更容易。在这种情况下,您不会错过有用的弃用消息。
也请查看 entry in deprecation guide,即使它有点技术性,我认为应该有更多真实世界的例子。
我使用的是 Ember 版本 2.16,我们升级到了 3.8。版本升级后,我看到了这个错误,但无法找出错误的来源。在什么情况下我会得到这个错误。我看到了其中一个 post:
Dynamic computed properties in Ember.JS deprecated?
但在我的代码中无法弄清楚。
我猜你不是一步步升级而是直接从2.18升级到3.8吧?在 3.2 中添加了弃用,即如果对象已创建,则必须使用 defineProperty
定义计算属性。该功能已在 3.5 中删除。不再支持在传递给 EmberObject.create()
的对象上使用 set
或 属性 动态设置计算 属性。
这已在 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() {
// ...
}));
}
});
这个旧语法不是 public API。虽然 Ember 不会对 public API 进行重大更改,但私有 API 可能随时更改。如果核心团队认为它们被广泛使用,它们将在下一个 LTS 版本后被弃用和删除。这里就是这种情况。
通常情况下,从 LTS 逐步升级到 LTS 更安全、更容易。在这种情况下,您不会错过有用的弃用消息。
也请查看 entry in deprecation guide,即使它有点技术性,我认为应该有更多真实世界的例子。