如何在Ember中从控制器重新加载路由模型?

时间:2019-02-07 12:03:51

标签: ember.js ember-data

我目前正在努力完成一项我认为很容易或很普通的任务:我想在控制器中启动路由模型的重新加载。据我所知,有没有简便的方法? 是的,我可以通过控制器的target属性访问RouteInfo对象,但是从那里看不到刷新模型的方法。

关于我要解决的任务的一些背景知识: 我有一条带有模型的路由,该模型提供了集合中的最后一个对象,该集合中的某个标志未设置(例如,路由/ index-object中的“未索引”)。现在,用户在该对象上工作,并在控制器中触发一个操作,该操作将该标志设置为“索引”。因此,如果我通过来回导航来重新加载路线,则会显示下一个对象。但是我想直接在操作中触发此重新加载(当然,无需重新加载整个页面)。

我的问题:这是否可能,或者还有另一种/正确的方式来实现我试图实现的目标?

1 个答案:

答案 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标志被更改,它将重新计算。