我正在尝试将灯具加载到我的嵌入记录的应用中。
从服务器加载数据(使用DS.RESTAdapter
)有效,但当我尝试通过DS.FixtureAdapter
加载数据时,它不起作用。
型号:
App.Post = DS.Model.extend
title: DS.attr('string')
comments: DS.hasMany('App.Comment')
App.Comment = DS.Model.extend
text: DS.attr('string')
# I'm not specifying DS.belongsTo('post') because comments could also exist
# with other objects.
# Anyway, it does not work even with it.
适配器:
App.Adapter = DS.FixtureAdapter.extend()
App.Adapter.map App.Post,
comments:
embedded: 'always'
商品
App.store = DS.Store.create
revision: 11
adapter: App.Adapter.create()
照明灯:
App.Comment.FIXTURES = []
App.Post.FIXTURES = [
{
id: "1"
title: "My post"
comments: [{
id: "1"
text: "My first comment"
}, {
id: "2"
text: "My second comment"
}]
}
]
在控制台:
中post = App.store.find(App.Post, 1);
comments = post.get("comments");
console.log(comments.get('length')); // => 1
firstComment = comments.get('firstObject');
console.log(firstComment.get('id')); // => undefined
console.log(firstComment.get('name')); // => TypeError: Cannot call method `hasOwnProperty` of undefined
我认为这个问题与this question有关,也可能与this pull request有关。
使用的Ember版本:
修改
Here is the JSFiddle that illustrate the problem。 我还写了a failing test here。
答案 0 :(得分:2)
App.Adapter = DS.FixtureAdapter.extend()
App.Adapter.map App.Product,
groups:
embedded: 'always'
还应包含App.Post始终嵌入注释吗?
如果这不能解决这个问题,我怀疑夹具适配器不适合嵌入式,你也必须定义注释。
更新:在与@tomdale讨论之后,不会对夹具适配器进行任何更改,以使其能够加载嵌入式记录。所以我能提出的就是:
顺便说一句,这就是汤姆所说的:我不相信夹具适配器支持嵌入式记录 它有什么理由需要吗? 它也不支持underscored_property_names 夹具适配器的想法不是模仿服务器的JSON有效负载 它以Ember Data期望的格式提供存根数据 所以没有嵌入关系,属性名称是camelCased等等。