【问题标题】:ember.js JSONAPIAdapter with hasManyember.js JSONAPIAdapter 与 hasMany
【发布时间】:2015-07-07 07:32:48
【问题描述】:

我尝试通过 DS.JSONAPIAdapter 将 {json:api}-JSON 与 ember.js (1.13.3) 和 ember-data (1.13.4) 一起使用。

JSON:

{
    "data": [
        {
            "type": "altersgruppe",
            "id": "1",
            "attributes": {
                "name": "ALTER_21_24",
                "tarifbeitraege": [
                    {
                        "type": "tarifbeitrag",
                        "id": "1",
                        "attributes": {
                            "name": "REISE",
                            "beitrag": "12.70",
                            "proergaenzung": "7,00",
                            "gesamtbeitrag": "25.99"
                        }
                    },
                    {
                        "type": "tarifbeitrag",
                        "id": "2",
                        "attributes": {
                            "name": "KRANKEN",
                            "beitrag": "25,70",
                            "proergaenzung": "7,00",
                            "gesamtbeitrag": "25.99"
                        }
                    }
                ]
            }
        },
        {
            "type": "altersgruppe",
            "id": "2",
            "attributes": {
                "name": "ALTER_25_30",
                "tarifbeitraege": [
                    {
                        "type": "tarifbeitrag",
                        "id": "3",
                        "attributes": {
                            "name": "REISE",
                            "beitrag": "29,70",
                            "proergaenzung": "7,00",
                            "gesamtbeitrag": "25.99"
                        }
                    },
                    {
                        "type": "tarifbeitrag",
                        "id": "4",
                        "attributes": {
                            "name": "KRANKEN",
                            "beitrag": "28,70",
                            "proergaenzung": "7,00",
                            "gesamtbeitrag": "30.99"
                        }
                    }
                ]
            }
        }
    ]
}

模型:

App.Altersgruppe = DS.Model.extend({
        name: DS.attr('string'),
        tarifbeitraege: DS.hasMany('tarifbeitrag', {async: true})
});    

App.Tarifbeitrag = DS.Model.extend({
            altersgruppe: DS.belongsTo('altersgruppe'),
            name: DS.attr('string'),
            beitrag: DS.attr('string'),
            proergaenzung: DS.attr('string'),
            gesamtbeitrag: DS.attr('string')
    });

当我使用 ember-inspector 查看数据时,只有模型“altersgruppe”有记录。模型“tarifbeitrag”没有记录。

那为什么?

适配器:

App.AltersgruppeAdapter = DS.JSONAPIAdapter.extend({
    namespace: REST_ADAPTER_NAMESPACE,
    shouldBackgroundReloadRecord: function(store, snapshot){
        return false;
    }
});

在我看来,“hasMany”-关系不起作用。如何解决。任何想法(JSON 错误?模型错误)。谢谢。

【问题讨论】:

    标签: ember.js


    【解决方案1】:

    因为 Mike1o1 提示再次阅读 {json:api}-Spec,我做了 决定将 JSON 的结构更改为:

    {
        "data": [
            {
                "type": "altersgruppe",
                "id": "1",
                "attributes": {
                    "name": "ALTER_21_24"
                },
                "relationships": {
                    "tarifbeitraege": {
                        "data": [
                            {
                                "type": "tarifbeitrag",
                                "id": "1"
                            },
                            {
                                "type": "tarifbeitrag",
                                "id": "2"
                            }
                        ]
                    }
                }
            },
            {
                "type": "altersgruppe",
                "id": "2",
                "attributes": {
                    "name": "ALTER_25_30"
                },
                "relationships": {
                    "tarifbeitraege": {
                        "data": [
                            {
                                "type": "tarifbeitrag",
                                "id": "3"
                            },
                            {
                                "type": "tarifbeitrag",
                                "id": "4"
                            }
                        ]
                    }
                }
            }
        ],
        "included": [
            {
                "type": "tarifbeitrag",
                "id": "1",
                "attributes": {
                    "name": "REISE",
                    "beitrag": "25,70",
                    "proergaenzung": "7,00",
                    "gesamtbeitrag": "25.99"
                }
            },
            {
                "type": "tarifbeitrag",
                "id": "2",
                "attributes": {
                    "name": "KRANKEN",
                    "beitrag": "25,70",
                    "proergaenzung": "7,00",
                    "gesamtbeitrag": "25.99"
                }
            },
            {
                "type": "tarifbeitrag",
                "id": "3",
                "attributes": {
                    "name": "REISE",
                    "beitrag": "29,70",
                    "proergaenzung": "7,00",
                    "gesamtbeitrag": "25.99"
                }
            },
            {
                "type": "tarifbeitrag",
                "id": "4",
                "attributes": {
                    "name": "KRANKEN",
                    "beitrag": "28,70",
                    "proergaenzung": "7,00",
                    "gesamtbeitrag": "30.99"
                }
            }
        ]
    }
    

    这适用于 DS.JSONAPIAdapter。现在在 ember-inspector 中,我可以看到模型“tarifbeitrag”也有记录。

    【讨论】:

      【解决方案2】:

      乍一看,这看起来不像是一个有效的 json-api 响应。 tarifbeitraege 应该是链接关系,而不是嵌入到数据类型的实际属性中。我不相信 json-api 支持这样的嵌入式属性。查看规范的compound documents 部分,了解您的 json 输出应该是什么。

      【讨论】:

      • 感谢您的提示/链接。但是同一页面在“属性”下说:--snip-- 允许将涉及 JSON 对象和数组的复杂数据结构作为属性值。但是,任何构成或包含在属性中的对象都不得包含关系或链接成员,因为这些成员由本规范保留以供将来使用。 --snip-- 因此我们假设你的结构是好的。但我现在用relationship 试试。但是,这种结构与 sideload 结构相距不远,后者在我们的 java 后端中实现起来有点困难。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-30
      • 1970-01-01
      • 2016-06-11
      • 1970-01-01
      相关资源
      最近更新 更多