具有嵌入式hasMany的ember-data fixtureAdapter

时间:2012-11-24 04:56:51

标签: ember.js ember-data

我已经在这里工作了几个小时,摆弄了许多不同的组合以使其发挥作用。

LO.List = DS.Model.extend({
  name: DS.attr('string'),
  listItems: DS.hasMany('LO.ListItem', { embedded: true })
});

var lists = LO.store.findAll(LO.List),
    firstList = lists.objectAt(0),
    listItems = firstList.get('listItems'),
    firstListItemId = listItems.objectAt(0).get('id');

console.log(firstListItemId) // [object Object]

http://jsfiddle.net/pjmorse/65eRS/

似乎“嵌入式”选项根本不起作用(我似乎无法在源代码中找到它的任何记录,但文档仍然说要使用它)。我无法找到在这里使用的正确选项(或者它是否正常工作)。任何人都知道我可以在哪里工作吗?

感谢您的帮助!

3 个答案:

答案 0 :(得分:2)

Ember-data(版本8)支持加载嵌入的相关对象。你必须通过调用它的'map'函数来配置适配器的序列化器以加载嵌入数据。这可以通过例如完成。在序列化程序的'init'中,如下所示:

LO.Serializer = DS.Serializer.extend({
    init: function(){
      this._super();
      this.map(LO.List, {
        listItems: {
          embedded: 'load'
        }
      });
    }
});

你可以找到适合你的小提琴的工作改编here

答案 1 :(得分:1)

Ember以异步方式返回数据,而不是代码建议的同步。这意味着只有在从持久层获取数据时才会更新变量“lists”。

解决方案:绑定。 这可以通过各种方式工作,具体取决于您想要做什么;例如,你可以绑定 变量“list”到控制器变量,该变量汇集到您的视图中。如果您需要进一步澄清,请与我们联系。

答案 2 :(得分:1)

Ember-data已取消对嵌入数据的支持。我几乎可以肯定这是暂时的,并且会说它应该作为适配器问题被带回lib。

与此同时,我可以随意使用这个相当丑陋的hasManyEmbedded shim作为只读嵌入式关联的权宜之计。

listItems: DS.hasManyEmbedded('LO.ListItem')

这是fork of your fiddle that uses this shim