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 ...