如果查询参数发生更改,我已经在路由中设置了queryParam设置以刷新模型。但是,当查询参数更改时,不会调用setupController
。知道为什么会这样吗?
export default Route.extend({
queryParams: {
id: {
refreshModel: true
}
},
setupController(controller) {
controller.start(); // fetches data synchronously from api
}
});
//解决方案感谢alptugd的回复
export default Route.extend({
queryParams: {
id: {
refreshModel: true
}
},
model() {
// Returning a new array/object/value everytime the hook is called, causes the
// setupController hook to be called.
return [];
}
setupController(controller) {
controller.start(); // fetches data synchronously from api
}
});
最佳答案
refreshModel
强制路由到refresh
,并且如预期的那样,您应该期望beforeModel
,model
,afterModel
和setupController
挂钩运行。然而; setupController
钩子(Hook)有一点区别:
看看source code或relevant API documentation中Ember的refresh
的route.js
方法的注释。都说:
“刷新此路径和任何子路径上的模型,以类似于从其他路径转换时输入路径的方式触发beforeModel
,model
和afterModel
钩子(Hook)。当前路径参数(例如article_id
)将传递到相应的模型挂钩,如果返回了不同的模型,则setupController
和关联的路线挂钩也会重新触发。”
这意味着;为了在发生setupController
时触发refresh
; model
挂钩应返回其他模型。就你而言您没有任何模型hook
;因此setupController
参数值更改后将不会调用id
。
顺便说说;如果覆盖setupController
钩子(Hook),则最好调用super方法,因为它的唯一目的是将model
属性保存到controller
。查看API,以获取有关此情况的详细说明。