Ember数据子文档

时间:2016-04-08 20:49:57

标签: ember.js ember-data

有关此主题的其他问题是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()字段?

2 个答案:

答案 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。这是应该容易的事情之一......这是我解决问题的两个方法。

  1. 这是最简单的。您可以使用名为ember片段的插件:https://github.com/lytics/ember-data-model-fragments。这允许您创建嵌套模型,而不强制子记录具有id。片段模型的设置与普通模型一样,并且具有干净/脏污的感觉。

  2. 您可以如上所述设置2个模型(周/天),但您可以使用belongsTo,而不是hasMany(单个记录与记录数组)。您还必须创建序列化器每个父模型(周,以及它所在的任何父级)并使用嵌入式记录mixin,将关系attrs设置为“反序列化:记录,序列化:记录”。您只需确保服务器的每个模型响应在层次结构中都有自己的ID。如果您使用的是Mongo / Mongoose,则可以通过嵌套子模式和使用对象文字语法来创建子文档。这样每个子文档都会获得它自己的id,即使它是一对一的关系。