如何在Ember.js中配置根路由

时间:2013-09-22 05:42:18

标签: ember.js

我想为/创建一条加载另一条路线的路线,比如“帖子”。似乎只有两个解决方案是配置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发布帖子。

2 个答案:

答案 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