Ember: Assertion Failed: EmberObject.create больше не поддерживает определение вычисляемых свойств
Я был на Ember версии 2.16, и мы обновились до 3.8. После обновления версии я вижу эту ошибку, но не могу понять, откуда эта ошибка. В каких случаях я получу эту ошибку. Я видел один из постов:
Динамические вычисляемые свойства в Ember.JS устарели?
Но не могу понять то же самое в моем коде.
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. В этом случае вы не пропустите полезные сообщения об устаревании.
Пожалуйста, обратите внимание на статью в руководстве по устареванию, даже если она немного техническая и должна иметь больше реальных примеров, на мой взгляд.