Я полагаю, что на основе вашего вопроса и комментариев. Было бы полезно иметь полный маршрут и код контроллера, поэтому, если это не поможет, мне понадобится эта информация.
На основании:
Достаточно просто перейти на другую страницу и вернуться к списку или обновить браузер, чтобы правильно перечислить только «опубликованные» статьи и решить мою проблему.
Я бы предположил, что существует проблема с загрузкой статей, иначе вычисленное свойство не переоценивается при изменении isPublished
.
Я бы попытался загрузить все и отфильтровать его в вычисляемом свойстве. Это может выглядеть так:
import Route from '@ember/routing/route';
import { inject as service } from '@ember/service';
export default Route.extend({
store: service(),
model() {
return this.store.findAll('article');
}
});
import { computed } from '@ember/object';
import Controller from '@ember/controller';
export default Controller.extend({
articles: computed('model.@each.isPublished', function () {
return this.model.filterBy('isPublished');
}),
});
Это загрузит все статьи в хуке модели, а затем обработает фильтрацию в вычисляемом свойстве. Когда свойство isPublished
изменяется в любой из статей, список должен обновляться.
Причина задержки обновления, вероятно, связана с тем, как вы сохраняете изменения. При запуске .save()
это асинхронная операция, которую нужно подождать перед переходом. Попробуйте:
actions: {
async publishArticle(article){
article.set('isPublished', true);
await article.save();
this.transitionToRoute('article.list');
}
}
Который будет ждать, пока обещание разрешится первым.