如何在 Ember 中从控制器重新加载路由模型?
How to reload route model from controller in Ember?
我目前正在努力完成一项我认为非常简单或常见的任务:我想在控制器中重新加载路由模型。据我所知,没有简单的方法可以做到这一点?
是的,我可以通过控制器的目标 属性 访问 RouteInfo
对象,但是从那里我看不到刷新模型的方法。
关于我尝试解决的任务的一些背景知识:
我有一个带有模型的路由,该模型提供集合中未设置特定标志的最后一个对象(例如 "not indexed" in route /index-object)。现在用户在这个对象上工作,并在控制器中触发一个动作,该动作设置了这个标志(到 "indexed")。因此,如果我通过来回导航重新加载路线,则会显示下一个对象。但是我想直接在操作中触发这个重新加载(当然不需要重新加载整个页面)。
我的问题:这是否可能或是否有 another/right 方法来实现我想要实现的目标?
我会以不同的方式处理这个问题。除非数据的内存要求非常大,否则您可以在路由中加载整个集合:
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
标志,它将重新计算。
我目前正在努力完成一项我认为非常简单或常见的任务:我想在控制器中重新加载路由模型。据我所知,没有简单的方法可以做到这一点?
是的,我可以通过控制器的目标 属性 访问 RouteInfo
对象,但是从那里我看不到刷新模型的方法。
关于我尝试解决的任务的一些背景知识: 我有一个带有模型的路由,该模型提供集合中未设置特定标志的最后一个对象(例如 "not indexed" in route /index-object)。现在用户在这个对象上工作,并在控制器中触发一个动作,该动作设置了这个标志(到 "indexed")。因此,如果我通过来回导航重新加载路线,则会显示下一个对象。但是我想直接在操作中触发这个重新加载(当然不需要重新加载整个页面)。
我的问题:这是否可能或是否有 another/right 方法来实现我想要实现的目标?
我会以不同的方式处理这个问题。除非数据的内存要求非常大,否则您可以在路由中加载整个集合:
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
标志,它将重新计算。