route.afterModel挂钩未被击中

时间:2017-01-24 21:27:59

标签: ember.js ember-router

当您尝试从父路由转换到同一路由时,未触发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。

1 个答案:

答案 0 :(得分:2)

参考AlexSpeller Diagonal查看给定余烬路径定义的路径结构,模板和路由挂钩。它是一个很棒的路线结构图形表示。

问题:

  

我在食物/水果的食物之下。如果我单击按钮   再次,我希望被带到食物路线,然后重定向到   选项

答案:food路由没有URL,因为它是父路由。你将永远处于这条路线的孩子状态(例如food.index)。因此,当您说transitionTo('food')表示您正在转换到food.index路线时。

网址/food/fruits - 将执行food模型挂钩和fruits模型挂钩。
URL /food - 将执行food/index模型挂钩,它不会执行food模型挂钩。

因此,在您的情况下,您可以从this.transitionTo('food.options') food挂钩中删除afterModel,然后您可以介绍food.index路线,其中包含食物选项。

查看包含索引路由的修改后的ember twiddle