如何从服务器获取嵌套路由ember 2.3.0的数据

时间:2016-02-07 11:47:11

标签: javascript templates ember.js

我有一个相关的帖子模型和评论模型,如下所示:

//  app/models/post.js

import DS from 'ember-data';

export default DS.Model.extend({
 //....
 comments: DS.hasMany('comment'),
 //....
})

// app/models/comment.js

import DS from 'ember-data'

export default DS.Model.extend({
 //....
 ad: DS.belongsTo('post'),,
 //....
})

app/router.js我有

Router.map(function() {
  this.route('post', {path: '/post/:post_id'}, function() {
    this.route('comments');
  });
)};

我在post中有一个app/templates/post.hbs模板,如下所示:

<h2>{{model.title}}</h2>
<p>{{model.body}}</p>

  {{#link-to "post.comments"}}
    <h2>Comments</h2>
  {{/link-to}}
  {{outlet}}

我还有一个模板来呈现app/templates/post/comments.hbs

中的评论
{#each model as |comment|}}
  <p>{{comment.body}}</p>
{{/each}}
{{outlet}}

我想当有人点击帖子模板上的评论链接时,评论模板会在帖子模板的{{outlet}}上呈现。我遇到的问题是获取comments模型的数据。我在comments中有app/routes/post/comments.js的路线,它看起来像这样:

import Ember from 'ember';

export default Ember.Route.extend({
  model(){
    //I don't know what to do here.
  }
});

我的后端服务器中的注释公开在/posts/:post_id/comments端点上。如何才能在评论模板上获得评论?

2 个答案:

答案 0 :(得分:1)

由于您已在父Post中加载route:post,因此您的route:post.comments可以直接向其请求Comment

// app/routes/post/comments.js
import Ember from 'ember';

export default Ember.Route.extend({
  model(){
    const post = this.modelFor('post');
    return post.get('comments');
  }
});

答案 1 :(得分:1)

我终于能够做到这一点。在James回答的帮助下,我唯一要做的就是为CommentAdapter设置动态命名空间。 我使用ember生成器生成了一个comment适配器,并将我的app/routes/post/comments.js文件更改为如下所示:

// app/routes/post/comments.js
import Ember from 'ember';

export default Ember.Route.extend({
  model(){
      const post = this.modelFor('post');
      this.store.adapterFor('comment').set('namespace', `posts/${post.id}`);
      return this.store.query('comment', post.id);
    }
 }); 

这可以按预期工作。