我目前正在努力完成一项我认为很容易或很普通的任务:我想在控制器中启动路由模型的重新加载。据我所知,有没有简便的方法?
是的,我可以通过控制器的target属性访问RouteInfo
对象,但是从那里看不到刷新模型的方法。
关于我要解决的任务的一些背景知识: 我有一条带有模型的路由,该模型提供了集合中的最后一个对象,该集合中的某个标志未设置(例如,路由/ index-object中的“未索引”)。现在,用户在该对象上工作,并在控制器中触发一个操作,该操作将该标志设置为“索引”。因此,如果我通过来回导航来重新加载路线,则会显示下一个对象。但是我想直接在操作中触发此重新加载(当然,无需重新加载整个页面)。
我的问题:这是否可能,或者还有另一种/正确的方式来实现我试图实现的目标?
答案 0 :(得分:2)
我会采取不同的方式。除非数据的内存需求很大,否则您可以在路由中加载整个集合:
import Route from '@ember/routing/route';
export default Route.extend({
model() {
return someFunctionThatFetchesYourData();
}
});
然后在您的控件中使用一个计算属性来过滤出您想要的项目:
import Controller from '@ember/controller';
import { computed } from '@ember/object';
export default Controller.extend({
firstObjectWithProperty: computed('model.@each.notIndexed', function(){
return this.model.find(obj => obj.notIndexed);
}),
});
然后,您可以仅在模板中使用{{firstObjectWithProperty}}
,如果notIndexed
标志被更改,它将重新计算。