如何在父路由中重新加载子路由模型?

时间:2017-01-23 04:21:38

标签: javascript ember.js

我有一个嵌套路线(见下文)。

this.route('home', {
    path: '/'
}, function() {
    this.route('foo', {
        path: '/foo'
    });
    this.route('bar', {
        path: '/bar'
    });
});

foo路由模型返回一个集合(数组)。

在父路线home内,我定义了一个名为reloadModel的函数。

我尝试从控制器重新加载模型但失败了(产生未定义的函数错误,controller.get(...).refresh is not a functioncontroller.get(...).reload is not a function)。

    reloadModel() {
        const controller = this.controllerFor('home/a');
        controller.get('model').reload();
    },

我想从父路线重新加载子路线的模型;但是,我现在知道我可以得到儿童路线吗?

我的问题

我如何refresh在路线foo的路线barhome中建模?

任何提示都表示赞赏。

1 个答案:

答案 0 :(得分:3)

从父路由刷新子路由的模型通常不是一个好主意,因为它可能不是首先加载的。相反,从孩子那里刷新父母的模型是很好的,因为加载子路线需要按照设计首先加载将加载父模型的父路线。

根据您对此功能的需求,您似乎将自己置于困境中并且应该考虑为什么我的设计是否要求我这样做,而不是如何我可以做到。

无论如何,您可以使用的方法是在父home路由中调用您在子模型路由中调用的相同功能。

例如,如果路线a有:

model() {
  return this.store.findRecord('a');
}

你会在home中做类似的事情:

reloadModel() {
  this.store.findRecord('a', { reload: true }); // skip the cache and make the request
}