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 解决。
我通过使用 '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 解决。