如何使用嵌套资源的Ember数据

时间:2014-07-01 17:02:45

标签: ember.js ember-data

我的应用程序后端有几个资源。为每种资源公开模型。

所有其他资源的入口点是User模型。我的意思是,给定User,我们可以找到BlogPost。给定BlogPost我们可以找到Comments等。

在Ember术语中,我们可以说:

User hasMany BlogPost
BlogPost hasMany Comment
Comment belongsTo BlogPost

通过后端公开表单的REST API:

GET /api/v1/users/1
GET /api/v1/users/1/blog_posts/1
GET /api/v1/users/1/blog_posts/1/comments/1

我正在尝试弄清楚如何使用Ember数据来提取属于某个Comment的某个BlogPost的{​​{1}}。

从我看到的,如果我为User定义典型的Ember模型:

Comment

App.Comment = DS.Model.extend({ ... blogPost: DS.belongsTo('App.BlogPost') }); 我有以下内容:

CommentRoute

请求发送至:

var CommentRoute = MessageRoute.extend({
    model: function(params) {
        this.store.find('comment')
    },

我甚至不知道从哪里开始,以便Ember Data使用以下格式的网址:

/api/v1/comments

我已经看过几个类似的问题(见下面的链接),但没有看到任何一个明确的答案。当ember-data可能没有这样的功能时,它们中的大多数已经差不多一年了(或者在其中一些主题中声称这样)。

我再次要求确认ember-data是否具有此类功能。

类似的问题:

  1. Ember Data nested Models
  2. Canonical way to load nested resources
  3. Deep nested routes

1 个答案:

答案 0 :(得分:1)

处理它的最佳方法是使用链接。如果你不想这样做,那就远远不受支持,而且难以入侵(管道只是不容易传递信息)。我个人建议在这种情况下推出自己的适配器(Ember without Ember Data)。

App.Foo = DS.Model.extend({
  name: DS.attr('string'),
  bars : DS.hasMany('bar', {async:true})
});

App.Bar = DS.Model.extend({
  foo: DS.belongsTo('foo'),
});

JSON:

{
  id: 1,
  name: "bill",
  links: {
    bars: '/foo/1/bars'
  }
}

示例:http://emberjs.jsbin.com/OxIDiVU/971/edit