我想将不完整的 URL 重定向到完整的正确 URL:
http://localhost/product/12/a-single-pr -> http://localhost/product/12/a-single-product-name
问题在于模型钩子(Hook)被调用两次而不是一次,从而发出两个相同的请求来检索单个对象。有什么线索吗?
routes/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'});
});
...
最佳答案
Ember 正在按预期工作。
你点击产品路由,它会获取模型,然后在 afterModel 中,它会重定向回产品路由,这将再次启动路由生命周期,这意味着它将再次获取模型,然后再次调用 afterModel。
解决该问题的另一种方法是替换为 afterModel 中的 URL,而不是重定向回同一路由。
请参阅此 StackOverflow 答案以实现此目的: https://stackoverflow.com/a/3503206/2891906
关于javascript - Ember.Route - 模型钩子(Hook)被调用两次而不是一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41941156/