1

我已经为此工作了几个小时,摆弄了许多不同的组合以使其正常工作。

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/

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

谢谢您的帮助!

4

3 回答 3

2

Ember-data(版本 8)确实支持加载嵌入的相关对象。问题是您必须通过调用其“映射”函数来配置适配器的序列化程序以加载嵌入式数据。例如,这可以在序列化程序的“init”中完成,如下所示:

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

你可以在这里找到你的小提琴的工作改编。

于 2012-11-29T13:55:53.980 回答
1

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

解决方案:绑定。这可以通过多种方式发挥作用,具体取决于您想要做什么;例如,您可以将变量“list”绑定到流入视图的控制器变量。如果您需要进一步说明,请告诉我。

于 2012-11-24T12:47:19.097 回答
1

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

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

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

是使用此 shim 的小提琴的叉子

于 2012-11-24T14:39:09.860 回答