模型的灰烬列表未刷新而不刷新页面

时间:2019-05-20 13:32:11

标签: ember.js ember-data

通过使用“已发布”属性对列表进行排序,我只显示已发布的文章。

现在,当我编辑文章并将其从“已发布”设置为“草稿”时,即使我在控制器中编写了过滤器,我也回到列表中,看到了“草稿”文章。

我如何保存

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

路线:

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

控制器:

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

在刷新页面之前,有些文章仍然是“草稿”,而当我刷新它们时是“已发布” ...只要转到另一页并返回列表,或者进行浏览器刷新就足以正确列出“已发布”的文章,从而解决了我的问题。

我应该在哪里寻找可以解决我的问题而无需刷新? 谢谢

2 个答案:

答案 0 :(得分:0)

首先尝试将变量设置到模型中,然后创建 DataRow row = selectedDataRowView.Row; dataTable1.ImportRow(row); 。喜欢

model.save()

答案 1 :(得分:0)

根据您的问题和评论,我在这里做出最佳猜测。拥有完整的路由和控制器代码会有所帮助,因此,如果这样做没有帮助,我将需要该信息。

基于:

  

只需转到另一页并返回列表,或者刷新浏览器就足以正确地仅列出“已发布”的文章,从而解决我的问题。

我猜想加载文章时会出现问题,否则在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');
  }
}

哪个将等待诺言首先解决。