0

我想为/加载另一条路线创建一条路线,比如“帖子”。似乎只有两个解决方案是配置 Ember 的IndexRoute

App.IndexRoute = Ember.Route.extend({
  redirect: function() {
    return this.transitionTo('posts');
  }
});

或者

将我们的“帖子”资源映射到/路径:

App.Router.map(function() {
  return this.resource('posts', { path: '/' });
});

第一个解决方案似乎不合理,因为它总是将访问者发送到/posts而不是实际的基本路径为/. 第二种解决方案似乎不合理,因为它只允许查看帖子,/而不允许查看/posts。第二种解决方案固有地创建了奇怪的嵌套 URL,例如/new新帖子而不是/posts/new.

配置加载另一个路由而不是重定向的最惯用方法是什么/,同时仍使目标资源可从其正常 URL 获得?换句话说,我/想要访问帖子的路径,并且仍然可以通过/posts.

4

2 回答 2

2

另一种方法是拥有你IndexController needsPostsController, 然后你可以render在你的index模板中使用来呈现帖子。

App.IndexController = Ember.Controller.extend({
  needs : ["posts"]
});

然后你的index模板可能只是

{{render 'posts'}}
于 2013-09-22T18:29:31.900 回答
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),您可以在 routesrenderTemplate挂钩中指定它。因此,如果您想使用您的posts模板并App.PostsController在您的 中使用App.IndexRoute,您将包括:

renderTemplate: function() {
   this.render('posts', { controller: 'posts' });
}

有关更多详细信息,请查看Ember.js 指南的路由部分

于 2013-09-22T05:53:11.300 回答