Ember список моделей не перезагружается без обновления страницы - PullRequest
0 голосов
/ 20 мая 2019

Я отображаю только опубликованные статьи, сортируя мой список с атрибутом «опубликовано».

Теперь, когда я редактирую статью и устанавливаю ее из «опубликованного» в «черновик», а затем возвращаюсь к списку, я вижу статью «черновик», даже если я написал фильтр в своем контроллере.

Как я экономлю

article.set('isPublished', true);
article.save();
this.transitionToRoute('article.list');

Маршрут:

  model() {
    return this.get('store').findAll('articles');
  }

Контроллер:

articleSorted: computed.filterBy('model', 'isPublished', true),

Кроме того, прежде чем я обновлю страницу, некоторые статьи все еще являются «черновиками», а когда я обновляю, они «публикуются» ... Достаточно просто перейти на другую страницу и вернуться к списку или выполнить обновление в браузере, чтобы составить только правильный список. «опубликованные» статьи и так решают мою проблему.

Куда мне обратиться, чтобы решить мою проблему без обновления? Спасибо

Ответы [ 2 ]

1 голос
/ 22 мая 2019

Я полагаю, что на основе вашего вопроса и комментариев. Было бы полезно иметь полный маршрут и код контроллера, поэтому, если это не поможет, мне понадобится эта информация.

На основании:

Достаточно просто перейти на другую страницу и вернуться к списку или обновить браузер, чтобы правильно перечислить только «опубликованные» статьи и решить мою проблему.

Я бы предположил, что существует проблема с загрузкой статей, иначе вычисленное свойство не переоценивается при изменении 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');
  }
}

Который будет ждать, пока обещание разрешится первым.

0 голосов
/ 21 мая 2019

Сначала попытайтесь установить переменную в модели, затем сделайте model.save().как

  article.set('name', 'draft');
  article.save().then(transitionToarticle).catch(failure);; // => PATCH to '/article/id'



...