我有一个routes/paper.js文件,其中有低于模型挂钩
model(params,transition){
let user = store.getRequest('user','paper/user')
let address = store.getRequest('address','paper/address')
return RSVP.hash({
user,
address
}).then((model) => {
set(model, 'address_name', get(model.address, 'name'));
return ...model
})
}
我想通过将api请求移到控制器并在setcontroller中使用它来减少模型钩子中的负载。但是模型没有数据,请在下面找到我的修改。
//controller/paper.js
testerfunction(params){
let user = store.getRequest('user','paper/user')
let address = store.getRequest('address','paper/address')
let paperId = params.paperID
return RSVP.hash({
paperID: paperID,
user,
address
}).then((model) => {
set(model, 'address_name', get(model.address, 'name'));
return ...model
})
}
//routes/paper.js
model(params,transition){
}
setupController(controller,model) {
testerfunction(get(this,'model.params');
}
但是我页面呈现器是空白的
2条答案
按热度按时间0md85ypi1#
setupController的默认实现为:
因此,你有两种选择,你可以使用
_super
调用默认实现,或者你可以重新实现它。还要注意,你需要使params
成为从model
钩子返回的对象的一部分。最后,你的testerfunction
返回一个promise。而model
希望你返回一个promise,setupController
却不希望。有关
setupController
的详细信息,请参见https://api.emberjs.com/ember/2.18/classes/Route/methods/setupController?anchor=setupController我已经写了这个答案是兼容的Ember 2.x基于您的代码,但请在未来让我们知道哪个版本的Ember您正在使用.
c0vxltue2#
我建议使用ember-concurrency。您的路线最终将看起来像这样:
作为一个额外的好处,您可以在控制器/模板中获得每个文件的加载状态,以便您可以执行以下操作:
另一个选择是添加一个加载模板,在加载模型挂钩时呈现该模板。