Корректно ли использование Ember Set в Ember Octane
В Ember Octane this.set заменено прямым присвоением значения в нужное поле.
Между тем осталась возможность импортировать set для использования с специфичными ember object.
В тоже время set корректно работает и с Glimmer компонентами.
В подавляющем количестве случаев простое присвоение работает корректно, и @tracked поля обновляются правильно. Но, например, в случае использования apollo.query, который возращает promise и изменении массива по индексу, изменения отображаются после разрешения промиса.
Например, в данном случае, где есть массив с индикаторами загрузки для каждого элемента перебираемого через each:
{{#each this.items as |item index|}}
<SomeComponent @loading={{get this.loading index}}/>
{{/each}}
this.loading[index] = true;
this.apollo.query({ query: CurrentQuery }, 'query_name').then(() => {
this.loading[index] = false;
})
Ember не отобразит индикатор загрузки, хотя в коде данные своевременно обновились.
Если убрать this.loading[index] = false;, то индикация отобразится после разрешения промиса, хоть и была объявлена раньше.
2 решения которые помогают решить эту промлему, это использование set:
set(this, 'loading.' + index, true);
Или после установки значения, перезадать поле само в себя:
this.loading[index] = true;
this.loading = this.loading;
Собственно от того возникает несколько вопросов:
- Корректно ли использовать
Ember Setв случаях изменения конкретного элемента массива или лучше перезадавать поле само в себя, или же есть более правильные методы. - Корректно ли вообще использовать
Ember Setв проектах на Ember Octane и не планируется ли разработчиками Ember в дальнейшем удалить поддержкуsetдаже в виде отдельного пакета?