如何访问 afterModel 钩子中的参数
How to access params in the afterModel hook
我在 model
挂钩中使用了 RSVP.hash。但是我需要我的路由来加载基于 url 的动态数据(其中包含一个动态段)。即 this.route('foo', {path: ':id'})
.
所以我决定将一些东西移出,改为 afterModel
挂钩。
但是,我需要使用 params
执行存储(用于分页):
model(params) {
this.set('params', params);
return this.store.findRecord('foo', params.foo_id);
},
afterModel: function(model) {
console.log(this.get('params')); // logs the right params
let params = this.get('params');
// This store query needs access to params
this.store.query('bar', { filter: { 'foo-id': model.get('id') }, page: { number: (params.page ? params.page : 1) } }).then(bars => {
this.controller.set('bars', bars);
});
}
setupController(controller, model) {
this._super(controller, model);
this.set('bars', bars);
}
到目前为止我有这个,它有效:
model(params) {
this.set('params', params);
...
},
afterModel: function(model) {
console.log(this.get('params')); // logs the right params
...
}
但这是在 afterModel
挂钩中访问 params
的唯一方法吗?
这种方法合理吗?
afterModel
挂钩提供了第二个名为 transition
的参数。您可以使用如下路径从中获取参数:transition.params.{route-name}.{param-name}
,因此考虑您的示例:
//let's say this is BazRoute and BazController:
model(params) {
return this.store.findRecord('foo', params.foo_id);
},
afterModel: function(model, transition) {
const params = transition.params.baz;
console.log(params); // logs the right params
// This store query needs access to params
this.store.query('bar', { filter: { 'foo-id': model.get('id') }, page: { number: (params.page ? params.page : 1) } }).then(bars => {
this.controller.set('bars', bars);
});
}
使用 this.paramsFor(this.routeName)
函数获取带有参数的普通对象。
我在 model
挂钩中使用了 RSVP.hash。但是我需要我的路由来加载基于 url 的动态数据(其中包含一个动态段)。即 this.route('foo', {path: ':id'})
.
所以我决定将一些东西移出,改为 afterModel
挂钩。
但是,我需要使用 params
执行存储(用于分页):
model(params) {
this.set('params', params);
return this.store.findRecord('foo', params.foo_id);
},
afterModel: function(model) {
console.log(this.get('params')); // logs the right params
let params = this.get('params');
// This store query needs access to params
this.store.query('bar', { filter: { 'foo-id': model.get('id') }, page: { number: (params.page ? params.page : 1) } }).then(bars => {
this.controller.set('bars', bars);
});
}
setupController(controller, model) {
this._super(controller, model);
this.set('bars', bars);
}
到目前为止我有这个,它有效:
model(params) {
this.set('params', params);
...
},
afterModel: function(model) {
console.log(this.get('params')); // logs the right params
...
}
但这是在 afterModel
挂钩中访问 params
的唯一方法吗?
这种方法合理吗?
afterModel
挂钩提供了第二个名为 transition
的参数。您可以使用如下路径从中获取参数:transition.params.{route-name}.{param-name}
,因此考虑您的示例:
//let's say this is BazRoute and BazController:
model(params) {
return this.store.findRecord('foo', params.foo_id);
},
afterModel: function(model, transition) {
const params = transition.params.baz;
console.log(params); // logs the right params
// This store query needs access to params
this.store.query('bar', { filter: { 'foo-id': model.get('id') }, page: { number: (params.page ? params.page : 1) } }).then(bars => {
this.controller.set('bars', bars);
});
}
使用 this.paramsFor(this.routeName)
函数获取带有参数的普通对象。