Эмбер не может наблюдать за массивами.Поэтому фреймворк не знает, что значение помещается в массив.Вы должны использовать собственный ember Ember.NativeArray
, и вместо него используется pushObject
метод .Это гарантирует, что платформа будет проинформирована, если запись добавлена или удалена из массива.Измененный код будет выглядеть следующим образом:
import { A } from '@ember/array';
export default Controller.extend({
newAttachments: A(),
setAttachment(file){
this.get('newAttachments').pushObject(file)
}
})
Не следует добавлять массив как свойство EmberObject
, так как это может привести к утечке между экземплярами.Это не производственная проблема в этом случае, потому что контроллеры - это одиночные файлы в ember.js.Но вы можете увидеть странное поведение в тестах.Рефакторинг для нативных классов решит эту проблему, поскольку поля классов не просочились между экземплярами.Для старых классов на основе EmberObject инициализация значения в init
hook или использование вычисляемого свойства являются распространенными способами решения этой проблемы:
// computed property
import { computed } from '@ember/object';
import { A } from '@ember/array';
export default Controller.extend({
newAttachments: computed(() => A()),
});
// init hook
import { A } from '@ember/array';
export default Controller.extend({
init() {
this._super(...arguments);
this.set('newAttachments', A());
}
});
Обратите внимание, что вам не нужно использовать get()
если работает Ember> = 3.1.