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

时间:2012-11-08 20:01:51

标签: ember.js ember-data

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

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

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

和:

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

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

App.itemsController = Ember.ArrayController.create({
    content: App.store.findAll(App.Item)
});

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

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

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

我的问题是:

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

1 个答案:

答案 0 :(得分:8)

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

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

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

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