如何从emberjs中的嵌套资源后端获取模型

时间:2015-06-12 00:15:18

标签: ember.js

我如何获取嵌套在Ember.js中的模型。我的意思是,我有一个名为post的模型。在我的终端中,我有一条路线来获取所有posts并获取具有post的特定id。但是,举例来说,如果我展示了具体的post,我如何才能获得与comments点击按钮相关的所有post

我在后端的路线是/posts/:post_id/comments

由于

2 个答案:

答案 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