在我的应用程序中,我需要在访问root时,它会重定向到最新模型的视图,在这种情况下,它始终是集合中的firstObject。
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'));
}
});
这没有问题,但是我直接转到根网址或视图,发出了两个相同的/threads
请求。一旦我对afterModel
部分发表评论,重定向显然不再起作用,但请求又回到了1。
很乐意接受任何帮助!
答案 0 :(得分:3)
由于Threads / View是嵌套路由,因此也会在View路径上调用ThreadsRoute。
我认为你应该只调用ThreadsRoute - > ThreadsIndexRoute或单独的模型和afterModel以这种方式挂钩:
(未经过测试的代码)
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'));
}
});
答案 1 :(得分:2)
您的示例与此示例相同:
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
,依次转换为每个人,这就是为什么你会看到要求找到两次的电话。
您可以通过仅在ThreadsIndexRoute
中使用模型挂钩来解决此问题(例如,将您的ThreadsRoute
重命名为ThreadsIndexRoute
)