我如何获取嵌套在Ember.js中的模型。我的意思是,我有一个名为post
的模型。在我的终端中,我有一条路线来获取所有posts
并获取具有post
的特定id
。但是,举例来说,如果我展示了具体的post
,我如何才能获得与comments
点击按钮相关的所有post
?
我在后端的路线是/posts/:post_id/comments
。
由于
答案 0 :(得分:3)
你可以试试ember-data-url-templates插件。
它允许通过网址模板指定您需要的网址。现在ember-data-url-templates
正处于早期发展阶段。
// console
ember install ember-data-url-templates
ember generate ember-data-url-templates
// adapters/comment.js
// add UrlTemplates mixin to your `Adapter` and specify url templates
import DS from "ember-data";
import UrlTemplates from "ember-data-url-templates";
export default DS.RESTAdapter.extend(UrlTemplates, {
urlTemplate: '{+host}/posts/{postId}/comments{/id}',
urlSegments: {
postId(type, id, snapshot, query) {
return snapshot.belongsTo('post', { id: true });
}
}
});
答案 1 :(得分:1)
使用新的JSONAPIAdapter
扩展@ filby的答案,使用JSON API 1.0规范,以下代码可以使用
来自服务器的单一帖子回复
'data': {
'type': 'posts',
'id': 1,
'attributes': {
'title:'A new post'
},
'relationships': {
'comments': {
'links':{
'related': '/api/posts/1/comments'
}
}
}
}
帖子模型
// models/post.js
import Model from 'ember-data/model';
import attr from 'ember-data/attr';
import { hasMany } from 'ember-data/relationships';
export default Model.extend({
title: attr('string')
comments: hasMany('comments');
});
评论模型
// models/comment.js
import Model from 'ember-data/model';
import attr from 'ember-data/attr';
import { belongsTo } from 'ember-data/relationships';
export default Model.extend({
post: belongsTo('post', {async: true});
likes: attr('number')
});
邮政路线
// post.js
import Ember from 'ember';
export default Ember.Route.extend({
model: function(params) {
return this.store.findRecord('post', params.post_id);
}
});
帖子模板
{{#each model.comments as |comment|}}
{{comment.likes}}
{{/each}}
评论请求将为/api/posts/1/comments
属性中指定的related
。