我在加载一些带有 ember-data 的相关模型时遇到问题。我很确定这是我的语法错误,但我只是看不到它。也许有人可以成为我的第二双眼睛?
具体问题是我的模板中没有显示相关模型。
无需再费周折:
笔记
- 我正在使用
ember-appkit-rails
. - 这是我的第一个 ember 项目,所以请原谅我的 n00bness。
- 我有一种感觉,答案可能与嵌入有关:“总是”,但我不知道如何将它集成到我的代码中。
- 调试:Ember:1.4.0 ember.js?body=1:3462
- 调试:Ember 数据:1.0.0-beta.7+canary.f482da04 ember.js?body=1:3462
- 调试:车把:1.3.0 ember.js?body=1:3462
- 调试:jQuery:1.11.0 ember.js?body=1:3462
有问题的模板
我认为这应该可行。它几乎完全来自 ember-appkit-rails 生成器。编剧和作曲家的名字没有出现。
<h3>{{id}}</h3>
<p>{{link-to 'Edit' 'operas.edit' this}} <button {{action destroyRecord this}}>Destroy</button></p>
<ul>
<li>Title: {{title}}</li>
<li>Alternate Title: {{alternate_title}}</li>
<li>Source: {{source}}</li>
<li>Librettist: {{librettist.name}}</li>
<li>Composer: {{composer.name}}</li>
<li>Notes: {{notes}}</li>
</ul>
楷模
歌剧.js.es6
export default DS.Model.extend({
title: DS.attr('string'),
alternateTitle: DS.attr('string'),
source: DS.attr('string'),
librettistId: DS.attr('number'),
composerId: DS.attr('number'),
notes: DS.attr('string'),
composer: DS.belongsTo('composer'),
librettist: DS.belongsTo('librettist')
});
librettist.js.es6
export default DS.Model.extend({
name: DS.attr('string'),
operas: DS.hasMany('opera')
});
作曲家.js.es6
export default DS.Model.extend({
name: DS.attr('string'),
operas: DS.hasMany('opera')
});
ActiveModel 序列化器
class OperaSerializer < ActiveModel::Serializer
embed :ids, include: true
attributes :id, :title, :alternate_title, :source, :librettist_id, :composer_id, :notes
has_one :composer
has_one :librettist
end
返回的示例 JSON
这是我在看一张歌剧唱片时看到的,但结构适用于整个系列:
{
"composers": [
{
"id": 4097,
"name": "Müller, Wenzel"
}
],
"librettists": [
{
"id": 1414,
"name": "Bäuerle, Adolf"
}
],
"opera": {
"alternate_title": "oder Wien in einem anderen Weltteile",
"composer_id": 4097,
"id": 4166,
"librettist_id": 1414,
"notes": "these are some notes",
"source": "F116.Theater.a.d.Wien.260A.Mus; Mus.Hs.78.Mus; Mus.Hs.25409.Mus",
"title": "Aline Königin von Golkonda"
}
}
我也尝试过使用内联嵌入 ( {opera: {...composer: {...}}}
) 的这种方法,但效果并不好。
谢谢你的帮助!保罗。