如何在 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 标志,它将重新计算。