如何使用Ember Data处理任何后端的嵌套数据?

时间:2014-08-06 01:12:21

标签: javascript ember.js ember-data

我有点疯狂,试图找出在应用程序中实现嵌套资源的最佳方法我用Ember / Ember Data作为前端。

首先,这是我的模特:

App.Gathering = DS.Model.extend({
    name: DS.attr('string'),
    events: DS.hasMany('event', { asynch: true })
});

App.Event = DS.Model.extend({
    name: DS.attr('string'),
    startDate: DS.attr('string'),
    endDate: DS.attr('string'),
    gathering: DS.belongsTo('gathering', { asynch: true })
});

除了非常基本的路线之外,我到目前为止所有这些 - 当我开始使用后端时,我的问题就出现了。我正在写前端和后端,所以在这个阶段,我真的可以实现后端,但最好。我觉得我已经在互联网上搜索,试图找到一种可靠的,最新的方法来获取与使用Ember数据收集相关的事件对象。我已经没有问题获取收集或事件的所有数据,但有一点时间弄清楚如何 - 给定一个特定的收集(id) - 只查询与该收集相关的事件而不必从服务器加载每个事件。特别是,稍后在路上会有嵌套在事件中的对象,所以我的目标是解决这个问题的可行的长期(ish)期限。

我尝试过使用&#34;链接&#34;从服务器返回的JSON属性,查找了10个关于查询参数的不同站点,并且过去三天几乎花了很多时间试图解决这个问题。我可以使用自定义AJAX查询,但由于这个项目很年轻,我想以尽可能友好的方式实现它,因为我并没有真正受到很多限制。< / p>

我对Ember / Ember Data(以及一般的前端开发)都很陌生,但我已经用Java编写了几年的代码,并且在OOP / MVC / IOC中拥有相当坚实的基础等等。

提前致谢!

更新

我认为我最缺乏的是如何实际访问这些嵌套资源的知识;张贴回答的例子清楚地说明了我的出色表现。找到RESTAdapter / Ember-Data的完整工作示例一直是一个小小的噩梦,所以非常感谢!

1 个答案:

答案 0 :(得分:1)

为了完整起见,Ember在没有Ember Data的情况下工作正常。如果您不想使用Ember数据,可以将POJO与Ember一起使用。

此外,您需要使用async代替asynch

对于使用links的异步记录,这是处理关系的完全合适的方法。

App.Gathering = DS.Model.extend({
    name: DS.attr('string'),
    events: DS.hasMany('event', { async: true })
});

App.Event = DS.Model.extend({
    name: DS.attr('string'),
    startDate: DS.attr('string'),
    endDate: DS.attr('string'),
    gathering: DS.belongsTo('gathering', { async: true })
});

现在这完全是意见,但如果我要查询使用身份1进行搜集,我可能会这样做。

查询

this.store.find('gathering', 1);

JSON响应

{
  gathering: {
    id: 1,
    name: 'foo',
    links: {
      events: '/events?gathering_id=1'
    }
  }
}

当您访问事件关系时,它会调用&#39; / events?gathering_id = 1&#39;

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