从Ember中的索引模板链接到嵌套对象

时间:2014-04-16 17:17:45

标签: ember.js ember-data

我正在尝试从它的索引模板链接到一个帖子,但无法弄清楚动态链接到参数。看起来我需要传递一个topic参数,如下所示,但我不确定如何从这条路线中找到这个主题。

模板

{{#each posts in controller}}
  {{#link-to 'post' topic post}}<h4>{{post.title}}</h4>{{/link-to}}
{{/each}}

路由器

App.Router.map(function() {
  this.resource('topic', { path: '/:topic_id' }, function(){
    this.resource('posts', { path: '/posts' });
  });
  this.resource('post', { path: '/:topic_id/posts/:post_id' });
});

路线

App.PostsRoute = Ember.Route.extend({
  model: function() {
    return this.store.find('posts');
  },
  renderTemplate: function(){
    this.render('posts'), {
    }
  }
});

1 个答案:

答案 0 :(得分:3)

您的每个陈述都是错误的,您将其作为each posts,但之后您正在使用post

{{#each post in controller}}
  {{#link-to 'post' topic post}}<h4>{{post.title}}</h4>{{/link-to}}
{{/each}}

此外,我不确定topic来自哪里。如果我猜测我可能会说它可能在父控制器上。在这种情况下,您需要引用托管该模型的控制器。要在帖子控制器中执行此操作,您需要设置needs,允许控制器与其他控制器进行通信

App.PostsController = Ember.ArrayController.extend({
   needs: ['topic']
});

然后在你的模板中就像这样

{{#each post in controller}}
  {{#link-to 'post' controllers.topic.model post}}<h4>{{post.title}}</h4>{{/link-to}}
{{/each}}

或者如果你想让它变得更漂亮

App.PostsController = Ember.ArrayController.extend({
   needs: ['topic'],
   topic: Ember.computed.alias('controllers.topic.model')
});

{{#each post in controller}}
  {{#link-to 'post' topic post}}<h4>{{post.title}}</h4>{{/link-to}}
{{/each}}