2017-01-30 7 views
0

さ:Ember.Route - モデルのフックが、私は完全に正しいURLに不完全なURLをリダイレクトしたいと呼ばれる二回の代わりに、1

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

問題は、モデルのフックが二回の代わりに1のと呼ばれているということです1つのオブジェクトを検索する2つの同一の要求を行います。すべての手がかりは?

ルート/ 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'}); 
}); 

... 

答えて

0

エンバーは、期待通りに動作しています。

製品ルートをヒットし、モデルをフェッチしてから、afterModelで製品ルートにリダイレクトします。これによりルートライフサイクルが再度開始されます。つまり、モデルを再度フェッチして、afterModelを再度呼び出します。

問題を解決する別の方法は、同じルートにリダイレクトするのではなく、afterModelのURLに置き換えることです。

それを達成するために、このStackOverflowの答えを参照してください: https://stackoverflow.com/a/3503206/2891906

関連する問題