【问题标题】:failed to get embedded's object property using ember.js with ember-data使用带有 ember-data 的 ember.js 无法获取嵌入的对象属性
【发布时间】:2012-11-08 20:01:50
【问题描述】:

我是 ember 的新手,并尝试了解它的工作原理。

我已经定义了一个带有 fixturesAdapter 作为适配器的商店(第 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/

我的问题是:

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

【问题讨论】:

    标签: ember.js ember-data


    【解决方案1】:

    当前版本的 ember-data 中存在一些重大更改。

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

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

    我调整了你的固定装置,让你的例子在这里工作:http://jsfiddle.net/dgeb/zHz4Y/

    【讨论】:

    • 感谢详细而清晰的解释以及更新的示例
    • 有帮助!在第 11 版中,夹具中缺少(完整的?)id 到字符串的强制也让我很痛苦。很高兴知道!
    猜你喜欢
    • 2021-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多