我已经在这里工作了几个小时,摆弄了许多不同的组合以使其发挥作用。
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/
似乎“嵌入式”选项根本不起作用(我似乎无法在源代码中找到它的任何记录,但文档仍然说要使用它)。我无法找到在这里使用的正确选项(或者它是否正常工作)。任何人都知道我可以在哪里工作吗?
感谢您的帮助!
答案 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')