ember.js - 未刷新页面未重新加载模型的 Ember 列表
问题描述
通过使用“已发布”属性对列表进行排序,我仅显示已发布的文章。
现在,当我编辑一篇文章并将其从“已发布”设置为“草稿”然后返回列表时,即使我在控制器中编写了过滤器,我也会看到“草稿”文章。
我是怎么存钱的
article.set('isPublished', true);
article.save();
this.transitionToRoute('article.list');
路线 :
model() {
return this.get('store').findAll('articles');
}
控制器 :
articleSorted: computed.filterBy('model', 'isPublished', true),
此外,在我刷新页面之前,有些文章仍然是“草稿”,当我刷新它们时,它们是“已发布”......只需转到另一个页面并返回列表,或者进行浏览器刷新就足以正确列出“已发布”文章等解决了我的问题。
我想在哪里解决我的问题而不刷新?谢谢
解决方案
根据您的问题和评论,我在这里做出了最好的猜测。拥有完整的路线和控制器代码会很有帮助,所以如果这没有帮助,我将需要这些信息。
基于:
只需转到另一个页面并返回列表,或者刷新浏览器就足以正确列出“已发布”的文章,从而解决我的问题。
我猜想加载文章时存在问题,否则计算属性在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');
}
}
这将等待承诺首先解决。
推荐阅读
- typescript - 具有动态字段名称的类型化 Zod 组合器
- performance - 如何使用 RcppParallel 调试持久的性能问题
- c++ - 如何访问作为枚举的嵌套模板参数?
- java - 在 Spring Boot 中使用不同数量的过滤器有效过滤数据
- swift - 为什么在 swift 中返回值时出现“void 函数中出现意外的非 void 返回值”错误?
- python - 如何在 REST api 请求中将 spacy doc 对象作为有效负载发送并在 api 中重建 spacy doc 对象?
- apache-kafka - 处理流向 Kafka 的流量的最佳方式是什么?
- python - dash 应用程序无法制作一个 Y 轴条格式
- python - 有没有办法把它浓缩成字典理解?
- r - R DT 剪辑表格选择按钮(将文本添加到正文时)