Ember Data JSON-API hasMany:怎么样?

时间:2015-09-30 04:04:26

标签: ember-data has-many json-api

我熟悉旧的余烬数据" sideloading"模型,看起来像这样: ```

{
  authors:[
    {id:1, name:"Ernest", type: 'author', books: [1,2]
  ],
  books: [
    {id:1, name: "For whom the bell tolls", type: 'book', author:1},
    {id:2, name: "Farewell To Arms", type: 'book', author:1}
  ]
}

但新的JSON-API方法不同。

首先,(我喜欢这个),属性与id和类型信息分开,防止命名空间冲突。

我还不了解如何与JSON-API格式建立hasMany关系。任何人都可以指向我关于如何预期的文档或文章吗? examples on the JSON-API page显示个人关系,但不显示hasMany

如果你能用新格式写上面的例子,你就回答了我的问题。

2 个答案:

答案 0 :(得分:2)

我在The JSON-API spec找到了答案。

每个模型都应该有一个relationships键,其值是一个对象,每个命名关系都有一个键,它还有一个data键,可以是单个对象,也可以是一个数组。 hasMany关系。

通过提供included密钥作为顶级成员,我可以延迟加载实体。

在这种情况下,上面的例子是:

{
  "data": [
    {
      "id": 1,
      "type": "author",
      "attributes": {
        "name": "Ernest"
      },
      "relationships": {
        "books": {
          "data": [
            {
              "id": "1",
              "type": "book"
            },
            {
              "id": "2",
              "type": "book"
            }
          ]
        }
      }
    }
  ],
  "included": [
    {
      "id": 1,
      "type": "book",
      "attributes": {
        "name": "For Whom the Bell Tolls"
      },
      "relationships": {
        "author": {
          "data": {
            "id": 1,
            "type": "author"
          }
        }
      }
    },
    {
      "id": 2,
      "type": "book",
      "attributes": {
        "name": "Farewell to Arms"
      },
      "relationships": {
        "author": {
          "data": {
            "id": 1,
            "type": "author"
          }
        }
      }
    }
  ]
}

答案 1 :(得分:0)

仅供参考:如果您想在以后获取hashMany关系,则还有两个选择。

1。使用Related Resource Link

只要需要hashMany关系,Ember Data就会调用具有相关链接的后端以获取所有关系。

{
    "data": [{
        ...,
        "relationships": {
            "books": {
                "links" {
                    "related": "http://example.com/books"
                }
            }
        }
    }]
}

2。使用查找ID

只要需要hashMany关系,Ember Data就会使用网址调用后端以获取给定的ID。在此示例中,它将为http://example.com/books?ids=1&ids=2

{
    "data": [{
        ...,
        "relationships": {
            "books": {
                "books": {
                    "data" [{
                        "id": "1",
                        "type": "book"
                    }, {
                        "id": "2",
                        "type": "book"
                    }]
                }
            }
        }
    }]
}