Ember 未刷新页面未重新加载的模型列表

Ember list of model not reloaded without refreshing page

我通过使用 'published' 属性对我的列表进行排序来仅显示已发表的文章。

现在,当我编辑一篇文章并将其从 'published' 设置为 'draft',然后我将 return 设置为列表时,即使我写了,我也会看到 'draft' 文章我的控制器中的过滤器。

我是如何储蓄的

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

路线:

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

控制器:

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

此外,在我刷新页面之前,一些文章仍然是 'draft',当我刷新它们时,它们是 'published'...只是转到另一个页面并 return 到列表,或者刷新浏览器足以仅正确列出 'published' 篇文章,从而解决我的问题。

如果不刷新,我应该去哪里解决我的问题? 谢谢

首先尝试将变量设置到模型中,然后再制作 model.save()。喜欢

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



我根据你的问题和评论在这里做出了最好的猜测。拥有完整的路线和控制器代码会很有帮助,所以如果这没有帮助,我将需要这些信息。

基于:

Just going to another page and return to the list, or doing a browser refresh is enough to list properly only 'published' articles and so solve my problem.

我猜想是加载文章时出现问题,否则当 isPublished 更改时计算的 属性 不是 re-evaluated。 我会尝试加载所有内容并在计算 属性 中过滤它。这可能看起来像:

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');
  }
}

哪个会先等待 promise 解决。