Ember.Route - 模型钩子被调用两次而不是一次

时间:2017-01-30 16:48:06

标签: javascript redirect ember.js ember-data hook

我想将不完整的网址重定向到完整正确的网址:

http://localhost/product/12/a-single-pr -> http://localhost/product/12/a-single-product-name

问题是模型钩子被调用两次而不是一次,从而产生两个相同的请求来检索单个对象。有线索吗?

路由/ product.js

import Ember from 'ember';

export default Ember.Route.extend({
  afterModel(model, transition) {
    let formatted = model.get('formatted');

    if (transition.params.product.formatted !== formatted) {
      let path = '/product/' + model.id + '/' + formatted;
      this.replaceWith(path, model);
    }
  },
  model(params) {
    return this.get('store').findRecord('product', params.product_id);
  }
});

router.js

...

Router.map(function() {
  this.route('product', {path: '/product/:product_id/*formatted'});
});

...

1 个答案:

答案 0 :(得分:0)

Ember按预期工作。

您点击产品路线,它获取模型,然后在afterModel中,它重定向回产品路线,这将再次启动路线生命周期,这意味着它将再次获取模型,然后再次调用afterModel。 / p>

解决问题的另一种方法是在afterModel中替换为URL,而不是重定向回相同的路径。

请参阅此StackOverflow答案以实现此目的: https://stackoverflow.com/a/3503206/2891906