无法使用带有ember-data的ember.js获取嵌入的对象属性

Nic*_*gny 7 ember.js ember-data

我是ember的新手,并试图了解它是如何工作的.

我已经使用fixturesAdapter定义了一个商店作为适配器(rev 7).我已经定义了两个模型:

App.Tag = DS.Model.extend({
    name: DS.attr('string'),
    item: DS.belongsTo('App.Item')
});
Run Code Online (Sandbox Code Playgroud)

和:

App.Item = DS.Model.extend({
    name: DS.attr('string'),
    tags: DS.hasMany(App.Tag, { embedded:true }),
})
Run Code Online (Sandbox Code Playgroud)

我还填充了他们相关的灯具,最后是一个控制器:

App.itemsController = Ember.ArrayController.create({
    content: App.store.findAll(App.Item)
});
Run Code Online (Sandbox Code Playgroud)

我在App.Item模型中定义了一个函数:

tagline: function(){
    return this.get('tags').toArray().map(function(tag){
        return tag.get('name');
    }).join(',');
}.property('tags.@each.isLoaded')
Run Code Online (Sandbox Code Playgroud)

这是相应的jsfiddle:http://jsfiddle.net/K286Q/29/

我的问题是:

  • 我究竟做错了什么?
  • 为什么它会看到与第一个项目关联的多个标签,但无法获取其名称?

Dan*_*rdt 8

您正在遇到当前版本的ember-data中的一些重大更改.

第一个是,自从ember-data的第6版开始,ID被字符串规范化,并且必须在fixture中表示为字符串.请注意,REST适配器将转换数字/字符串,但夹具适配器不会进行任何转换.这是混淆的常见原因(参见上一个问题).

第二是对嵌入数据对象的支持已暂时从ember-data中删除.我很确定这个功能将以比支持{embedded: true}属性更好的方式重新引入.IMO,嵌入更多的是适配器问题,并不真正属于模型的定义.

我调整了你的灯具并让你的例子在这里工作:http://jsfiddle.net/dgeb/zHz4Y/