Ember.js 当使用动态段id时,afterModel钩子中的Ember参数和模型为零

Ember.js 当使用动态段id时,afterModel钩子中的Ember参数和模型为零,ember.js,Ember.js,我有一个路由器,看起来像这样: App.Router.map(function () { this.resource('foo', { path: 'foo/:foo_id' }, function() { ... } }); 当我访问/foo/1时,它会自动正确加载模型并显示。但是,我想使用afterModelhook进行一些重定向()。为了调试,我做了以下操作: App.FooIndexRoute = Ember.Route.extend({ afterModel: fu

我有一个路由器,看起来像这样:

App.Router.map(function () {
  this.resource('foo', { path: 'foo/:foo_id' }, function() {
  ...
  }
});
当我访问
/foo/1
时,它会自动正确加载模型并显示。但是,我想使用
afterModel
hook进行一些重定向()。为了调试,我做了以下操作:

App.FooIndexRoute = Ember.Route.extend({
   afterModel: function(model, transition) {
      console.log(model); // This returns `undefined`
   }
});
但是它记录了
未定义的

然后我尝试手动检查模型中的参数:

App.FooIndexRoute = Ember.Route.extend({
   ...
   model: function(params) {
     console.log(params); // This returns an empty queryParams object
   }
});
但这会记录
queryParams
对象,其中没有ID

我理解我可能误解了动态段ID可访问的位置,例如,它是否只能从
FooRoute
访问?如果是这样的话,考虑到你有
FooIndexRoute
,你为什么要在任何事情上使用该路由


最重要的是,
afterModel
钩子不应该记录模型吗?

正确地说,它们只能从
foodroute

App.FooRoute = Ember.Route.extend({
   ...
   model: function(params) {
     console.log(params); 
   }
});
FooRoute
是与此处的资源foo关联的实际路由

this.resource('foo', { path: 'foo/:foo_id' }, function() {
  // this.route('index');  // free route defined by Ember
  ...
}
FooIndexRoute
仅仅是当您点击资源的根目录时所点击的资源下方的一条路由。换句话说,如果您刚刚点击
/foo/123
Ember将使用
{outlet}
中的
foo/index
模板呈现
foo
模板。当您希望在资源根目录下显示与在资源下查看不同路由/资源时不同的内容时,这非常有用

例如,想象一下您正在查看一组帖子的用例。您首先访问
/posts
,然后在索引路径中显示一个帖子列表,您可以单击该列表查看单个帖子。一旦他们点击了你想让你的url显示的帖子,但是你不想再显示帖子列表了,你只想显示那篇帖子。代码应该是这样的

路由器 帖子模板 帖子/视图模板
PS没有与
FooIndexRoute
关联的模型,只有
FooRoute
,这就是为什么
afterModel
没有任何关联。

FooRoute
中使用
afterModel
钩子时,我最初忘记了使用
.get()
。谢谢你的解释!
this.resource('posts',  function() {
  this.route('view',{ path: ':id' });  
}
<h1> Posts </h1>
{{outlet}}
... show all posts here ...
... show selected post here ...