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

标签 javascript redirect ember.js ember-data hook

我想将不完整的 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/

相关文章:

java - 在 Java 5/6 中重定向 ProcessBuilder 的输出?

model - Ember.js ArrayProxy 模型数组

javascript - jQuery 识别来自用户的点击,而不是触发

powershell - 将任何 URL 重定向到 netsh 创建的托管网络 (Windows) 中的给定 IP (Localhost)

javascript - Node + Express : Does Express clone the req and res objects for each request handler?

即将到来页面的 URL 重定向?

javascript - EmberJs - 从模态中冒泡 Action

json - 创建一个 Ember 数据适配器以从 Flickr API 中提取数据

javascript - Node JS 如何从客户端获取上传的文件?

javascript - 循环遍历包含另一个表单的表单