我是Emberjs的新手,我正在尝试了解如何从模型中获取数据。
这是从我的服务器返回的数据结构
candidate: {
image: [image],
user: {
name: [User Name]
},
agent: {
phone: [phone]
team: {
name: [Team Name]
}
user: {
name: [User Name]
}
}
}
我无法让余烬识别任何超过一级的关联。
这是我的候选控制器
App.CandidateController = Ember.ObjectController.extend({
location: function() {
var address = this.get('address');
var city = this.get('city');
var state = this.get('state');
var zip = this.get('zip');
return address + ' ' + city + ' ' + state + ', ' + zip;
}.property('address', 'city', 'state', 'zip')
});
App.CandidateSerializer = DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, {
attrs: {
agent: {embedded: 'always'},
user: {embedded: 'always'}
}
});
这允许我深入一个层次,但我需要两到三个层次的关联。
有没有不同的方法可以做到这一点?
我认为按照我希望它显示的方式组织服务器上的所有内容,并且只是返回应该呈现给 ember 的数据,但我有一种感觉,在尝试更新模型时会遇到问题。
任何帮助,不胜感激。
/******更新*******/
我已经重构了我的代码,现在我从序列化程序返回数据,如下所示:
{
candidate: {
// relevant fields
},
agent: {
//relevant fields
},
team: {
// relevant fields
}
user: [
{ // candidate user fields },
{ // agent user fields }
]
};
但是,我的模板中仍然没有数据。在 Ember chrome 扩展名中,在数据选项卡中,我得到
candidate: (1)
agent: (0)
team: (0)
user (2)
我可以看到候选人和用户数据,但看不到代理或团队数据。 在我的候选模型中,我有:
App.Candidate = DS.Model.extend({
// other fields
user_id: DS.attr('number'),
agent_id: DS.attr('number'),
user: DS.belongsTo('user'),
agent: DS.belongsTo('agent')
});
似乎归属协会实际上并没有做任何事情。
所以第一个问题是我没有获得正确的数据,第二个问题,也是让我觉得我做错了这个问题的问题,是我需要在模板中显示两个用户信息。 第一个是与候选人关联的用户信息,第二个是与代理关联的用户信息。 这两个数据需要显示在同一模板中。 由于数据没有层次结构,模板如何知道要在每个位置显示哪些用户信息?
再一次,我认为我对整个事情的想法是错误的。
感谢您的帮助。
Ember 数据期望 JSON 响应中的模型是平面的,序列化程序的工作是将服务器响应转换为该格式。关联通常由 id 完成。第二关不起作用,因为 Ember 需要将每个关卡变成一个Ember.Object
才能观察属性变化。
查看指南的 JSON 约定部分可能会有所帮助。您还可以将模型插入 ember 数据模型制作器,并查看响应的外观。最后,请确保您使用的是 ember-inspector Chrome 扩展程序。当我调试与 ember 数据相关的问题时,通常最简单的方法是在 model
钩子返回后停止,查看检查器的存储选项卡,并检查已加载的数据。