有关此主题的其他问题是over 3 years old。
我看到这个documentation on serializers,这似乎就是答案,但我无法让它发挥作用。我只想要一个简单的JSON对象结构:
business-hours : {
monday: {
open: “24hr”,
from: <some time>,
to: <some time>
},
tuesday: {
open: “closed”,
from: <some time>,
to: <some time>
}
},
此举是什么意思?
编辑:,与编辑空DS.attr()字段中的键一样,以响应锁定请求获取更多信息。我将此组件传递给模型:
<h3>Business Hours</h3>
{{business-hours model=model}}
尝试编辑model.businessHours属性,以创建上述概述的理想记录:
{{input type="time" value=model.businessHours.friday.from}}
{{input type="time" value=model.businessHours.friday.to}}
这种语法是否允许我在模型中形成适当的“子文档”?使用空的DS.attr()字段?
答案 0 :(得分:1)
如果你想编辑这些子文档,你应该使用一个模型。
因此,您有两个模型:
/models/business-hour-week.js 从'ember-data'导入DS;
export default DS.Model.extend({
monday: DS.hasMany('business-hour-day'),
tuesday: DS.hasMany('business-hour-day')
});
/模型/商务小时天 从'ember-data'导入DS;
export default DS.Model.extend({
open: DS.attr('string'),
from: DS.attr('date'),
to: DS.attr('date')
});
然后使用序列化程序将数据转换为有效的JSONAPI文档,如下所示:
{
data: {
type: 'business-hour-week',
id: '1',
relationshops: {
monday: {
data: {
id: '1',
open: '24hr',
from: '<some time>',
to: '<some time>',
}
},
toesday: {
data: {
id: '1',
open: 'closed',
from: '<some time>',
to: '<some time>',
}
}
}
}
}
然后您可以使用它并按预期使用它。
答案 1 :(得分:0)
以上都不适合我。使用序列化程序添加ID似乎是hackery。这是应该容易的事情之一......这是我解决问题的两个方法。
这是最简单的。您可以使用名为ember片段的插件:https://github.com/lytics/ember-data-model-fragments。这允许您创建嵌套模型,而不强制子记录具有id。片段模型的设置与普通模型一样,并且具有干净/脏污的感觉。
您可以如上所述设置2个模型(周/天),但您可以使用belongsTo,而不是hasMany(单个记录与记录数组)。您还必须创建序列化器每个父模型(周,以及它所在的任何父级)并使用嵌入式记录mixin,将关系attrs设置为“反序列化:记录,序列化:记录”。您只需确保服务器的每个模型响应在层次结构中都有自己的ID。如果您使用的是Mongo / Mongoose,则可以通过嵌套子模式和使用对象文字语法来创建子文档。这样每个子文档都会获得它自己的id,即使它是一对一的关系。