我有一个相关的帖子模型和评论模型,如下所示:
// 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
端点上。如何才能在评论模板上获得评论?
答案 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);
}
});
这可以按预期工作。