我想为/
创建一条加载另一条路线的路线,比如“帖子”。似乎只有两个解决方案是配置Ember的IndexRoute
:
App.IndexRoute = Ember.Route.extend({
redirect: function() {
return this.transitionTo('posts');
}
});
或
将我们的“帖子”资源映射到/
路径:
App.Router.map(function() {
return this.resource('posts', { path: '/' });
});
第一个解决方案似乎不合理,因为它总是将访问者发送到/posts
,而不是实际的基本路径为/
。第二种解决方案似乎不合理,因为仅允许从/
而不是/posts
查看帖子。第二种解决方案固有地为/new
创建奇怪的嵌套网址,而不是/posts/new
。
配置/
加载其他路由而不是重定向的最惯用方法是什么,同时仍然可以从其普通网址获取目标资源?换句话说,我希望/
路径可以访问帖子,并且仍然可以通过/posts
发布帖子。
答案 0 :(得分:2)
另一种方法是让IndexController
needs
PostsController
,然后您可以使用render
模板中的index
来呈现帖子
App.IndexController = Ember.Controller.extend({
needs : ["posts"]
});
然后您的index
模板可能只是
{{render 'posts'}}
答案 1 :(得分:1)
我认为您想要做的是以下内容:
App.IndexRoute = Ember.Route.extend({
model: function() {
return this.get('store').findAll('post');
},
setupController: function(controller, model) {
this.controllerFor('posts').set('content', model);
}
});
这样,这条路线的控制器将是ArrayController
,其中包含您的所有帖子。您仍然可以按照自己喜欢的方式使用/posts
路线。默认情况下,这将是App.IndexController
(您可以覆盖以实现自定义功能)。
或者,如果您想使用其他控制器(比如App.PostsController
),您可以在路由renderTemplate
挂钩中指定。因此,如果您想使用posts
模板和App.PostsController
中使用的App.IndexRoute
,则应包括:
renderTemplate: function() {
this.render('posts', { controller: 'posts' });
}
有关详细信息,请查看routing section of the Ember.js guides。