2017-01-23 67 views
2

我有一个嵌套的路线(见下文)。如何在父路线中重新加载儿童路线的模型?

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

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

里面父路由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模型路线foobar从路线home

任何暗示理解。

+0

哪些功能是在你的错误'GET','controllerFor'或'重装未定义'? – nem035

+0

我已更新该问题。这是因为我从控制器只是一个普通物体检索到的'model'? –

+1

肯定会导致问题,因为只有Ember Data模型具有'reload'方法。 – nem035

回答

3

它通常不是从父路由刷新子路由的模型,因为它可能没有在第一时间装个好主意。与之相反,刷新父级模型与子级无关,因为加载子级路由需要通过设计首先加载将加载父级模型的父路由。

根据您的需要这样的功能,似乎你把自己放在一个艰难的位置,也许应该想想为什么确实我的设计要求我做这件事,而不是如何我能做到这一点。

Neverthless,您可以使用的方法是在父路径home内调用与您在子模型路由中调用的功能相同的功能。

例如,如果路线a有:

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

你会做类似的事情在home

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

谢谢,你的回答对我有意义。我想我需要改变我的设计。 –

+1

@李新阳很高兴帮助伴侣。 Ember最主要的一点是对设计非常严格,并试图通过使所有其他方法变得更加困难来推动我们采用正确的方法。因此,更多的时间比没有困难的事情可能是我们的方法存在缺陷,而不是Ember缺乏能力。当然这不是100%真实的,但它是一般的行为。 – nem035

+0

fetchRecord不在烬数据的事 – xoma