route.afterModel 钩子没有被击中
route.afterModel hook not being hit
当您尝试从父路由转换到同一路由时,未命中 afterModel 挂钩。
我希望 afterModel 挂钩始终触发。
编辑:
这有点难以理解,除非你可以看一下 twiddle,但这是代码
// Controller/application.js
export default Ember.Controller.extend({
appName: 'Ember Twiddle',
actions: {
goTo() {
this.transitionToRoute('food');
}
}
});
// templates/application.hbs
<button onclick={{action 'goTo'}}>Food Options</button>
<br>
{{outlet}}
//router.js
const Router = Ember.Router.extend({
location: 'none',
rootURL: config.rootURL
});
Router.map(function() {
this.route('food', function() {
this.route('options');
this.route('fruits');
this.route('veggies');
});
});
//routes/food.js
export default Ember.Route.extend({
model() {},
afterModel() {
this.transitionTo('food.options');
}
});
第一次点击食物选项按钮正确调用食物路线中的afterModel。第二次点击不点击afterModel
参考 AlexSpeller Diagonal 以查看给定 ember 路由定义的路由结构、模板和路由挂钩。它是路线结构的绝佳图形表示。
问题:
I am in a sub route under food, say food/fruits. If I click the button
again I expect to be taken to the food route and then redirected to
options
答案:food
路由没有URL,因为它是父路由。您将始终处于此路由的子状态(例如 food.index)。因此,当您说 transitionTo('food')
时,这意味着您正在过渡到 food.index
路线。
URL /food/fruits
- 将执行 food
模型挂钩和 fruits
模型挂钩。
URL /food
- 将执行 food/index
模型挂钩,不会执行 food
模型挂钩。
所以在你的情况下,你可以从 food
afterModel
钩子中删除 this.transitionTo('food.options')
并且你可以引入 food.index 有食物选择的路线。
查看包含索引路由的修改后的 ember twiddle。
当您尝试从父路由转换到同一路由时,未命中 afterModel 挂钩。
我希望 afterModel 挂钩始终触发。
编辑: 这有点难以理解,除非你可以看一下 twiddle,但这是代码
// Controller/application.js
export default Ember.Controller.extend({
appName: 'Ember Twiddle',
actions: {
goTo() {
this.transitionToRoute('food');
}
}
});
// templates/application.hbs
<button onclick={{action 'goTo'}}>Food Options</button>
<br>
{{outlet}}
//router.js
const Router = Ember.Router.extend({
location: 'none',
rootURL: config.rootURL
});
Router.map(function() {
this.route('food', function() {
this.route('options');
this.route('fruits');
this.route('veggies');
});
});
//routes/food.js
export default Ember.Route.extend({
model() {},
afterModel() {
this.transitionTo('food.options');
}
});
第一次点击食物选项按钮正确调用食物路线中的afterModel。第二次点击不点击afterModel
参考 AlexSpeller Diagonal 以查看给定 ember 路由定义的路由结构、模板和路由挂钩。它是路线结构的绝佳图形表示。
问题:
I am in a sub route under food, say food/fruits. If I click the button again I expect to be taken to the food route and then redirected to options
答案:food
路由没有URL,因为它是父路由。您将始终处于此路由的子状态(例如 food.index)。因此,当您说 transitionTo('food')
时,这意味着您正在过渡到 food.index
路线。
URL /food/fruits
- 将执行 food
模型挂钩和 fruits
模型挂钩。
URL /food
- 将执行 food/index
模型挂钩,不会执行 food
模型挂钩。
所以在你的情况下,你可以从 food
afterModel
钩子中删除 this.transitionTo('food.options')
并且你可以引入 food.index 有食物选择的路线。
查看包含索引路由的修改后的 ember twiddle。