Javascript js afterModel钩子会触发两个相同的请求

Javascript js afterModel钩子会触发两个相同的请求,javascript,ember.js,ember-data,Javascript,Ember.js,Ember Data,在我的应用程序中,当我访问根目录时,它会重定向到最新模型的视图,在本例中,该模型始终是集合中的第一个对象 App.Router.map(function() { this.resource('threads', { path: '/' }, function() { this.route('view', { path: ':thread_id' }); }); }); App.ThreadsRoute = Ember.Route.extend({ model

在我的应用程序中,当我访问根目录时,它会重定向到最新模型的视图,在本例中,该模型始终是集合中的第一个对象

App.Router.map(function() {
    this.resource('threads', { path: '/' }, function() {
        this.route('view', { path: ':thread_id' });
    });
});

App.ThreadsRoute = Ember.Route.extend({
  model: function() {
    return this.store.find('thread');
  },
  afterModel: function(threads) {
    this.transitionTo('threads.view', threads.get('firstObject'));
  }
});
这是工作没有问题,但当我直接去根url或查看一个2相同的请求,以
/线程
。当我对
afterModel
部分进行注释时,重定向显然不再起作用,但请求返回到1


我们乐意接受任何帮助

您的示例与此示例相同:

App.Router.map(function() {
    this.resource('threads', { path: '/' }, function() {
        this.route('view', { path: ':thread_id' });
    });
});

App.ThreadsRoute = Ember.Route.extend({
  model: function() {
    return this.store.find('thread');
  }
});

App.ThreadsIndexRoute = Ember.Route.extend({
  model: function() {
    return this.store.find('thread');
  }
});
如果您在访问
'/'
时检查您所在路线的检查器,您将看到您在
threads.index
,依次转换为每个线程,这就是为什么您会看到两次对find的调用。
您可以通过仅在
ThreadsIndexRoute
中使用模型挂钩来修复此问题(例如,将
ThreadsRoute
重命名为
ThreadsIndexRoute

由于线程/视图是嵌套的路由,因此也会在视图路由上调用ThreadsRoute

我认为您应该这样调用ThreadsRoute->ThreadsIndexRoute或单独的model和afterModel挂钩:

(未测试代码)


好的,这很合理。所以我需要推翻这一点,但考虑到它的行为必须保持不变,以何种方式?似乎在最新的ember版本中,父模型将传递给子模型。此外,如果我将模型的实例传递到
transitionTo
中,则不应触发模型挂钩。请看本页第一部分的底部
App.ThreadsRoute = Ember.Route.extend({
  model: function() {
    // console.log('in model);
    return this.store.find('thread');
  }
});

App.ThreadsIndexRoute = Ember.Route.extend({
  afterModel: function(threads) {
   // console.log('in afterModel);
    this.transitionTo('threads.view', threads.get('firstObject'));
  }
});