Вы возвращаете ссылку на объект, хранящийся в this.recent
в хуке модели. Но метод getRecent
не изменяет этот объект, а заменяет this.recent
. После первого выполнения метода getRecent
модель маршрута и this.recent
больше не являются одним и тем же объектом. Модель маршрута, к которой вы можете получить доступ через this.modelFor(this.routeName)
, является начальным значением, а this.recent
- новым значением.
Вместо этого вы хотите изменить объект, возвращаемый обработчиком модели.
Объект, указанный в вашем примере, имеет фиксированную схему. Это позволяет вам пометить свойство A
как отслеживаемое:
recent: {
@tracked A: 0,
...
}
В настоящее время вы возвращаете значение this.recent
в хуке вашей модели. Но вместо того, чтобы перезаписывать его в методе getRecent
, вы изменяете только значение его свойства A
:
getRecent() {
this.recent.A = <some new value fetched>;
later(this, this.getRecent, 2000);
}
Если вы не знаете схему объекта, возвращаемого в хуке модели, или если вы имеете дело с массивом, это немного сложнее. У вас не было бы собственности, которую можно было бы украсить @tracked
. В этом случае я бы рекомендовал использовать пакет tracked-built-ins
.
Для массивов вы также можете вернуться к устаревшему MutableArray
из @ember/array/mutable
пакета. Но в этом случае вы должны убедиться, что используете специальные методы для управления массивом (например, pushObject
вместо push
).