javascript - 为多级 JSON 创建 Breeze 元数据

标签 javascript json metadata breeze

我是 Breeze 新手,不太确定如何为服务器返回的 JSON 数据创建 javascript 元数据。我必须创建自定义元数据,因为服务器不提供我需要的元数据。我们使用oData。有人可以帮助我根据此 JSON 数据创建 JavaScript 元数据吗?

{
	id: "5091bed7-e035-45c6-b2c5-d1301e4170e6",
	name: "Mike",
	address: {
		city: "San Jose",
		state: "CA"
	},
	orders: [
		{
			id: "1889e425-e8ad-4b79-b797-fe9aa6b0e433",
			date: "2015/04/12 00:00:00",
			items: [
				{
					id: "a71aa2eb-9f8d-4234-aa83-6dfc5cd8abcc",
					description: "chocolate",
					price: "5.00"
				},
				{
					id: "5091bed7-e035-45c6-b2c5-d1301e414444",
					description: "cookie",
					price: "1.00"
				}
			]
		},
		{
			id: "5ed077b0-72c4-43d0-fe96-6bebce6e3c86",
			date: "2015/05/22 00:00:00",
			items: [
				{
					id: "bc5ed003-1302-4686-8294-4a0186e550a2",
					description: "pencil",
					price: "0.50"
				}
			]
		}
	]
}

最佳答案

在 Breeze 中,每个对象都将被处理为 Entity (如果它有标识符)或 Complex Type (如果没有)。在您的例子中,我为“Customer”(顶级对象)、“Order”和“OrderItem”创建了实体。我为“地址”创建了一个复杂类型。

请注意,每个传入对象应该有一个“$type”属性来告诉 Breeze 它是什么实体类型或复杂类型。如果没有它,您将需要一个自定义的 [JsonResultsAdapter] 来告诉 Breeze 类型。

我的元数据与您的对象不同,因为我假设外键可用于将 Customer 连接到 Order 到 OrderItem,反之亦然。这使得实体更易于使用,但如果您的服务器无法提供它们,您应该从元数据中忽略它们。

{
  "structuralTypes": [
    {
      "shortName": "Address",
      "namespace": "MyApp",
      "isComplexType": true,
      "dataProperties": [
        {
          "name": "city",
          "dataType": "String",
          "maxLength": 15
        },
        {
          "name": "state",
          "dataType": "String",
          "maxLength": 15
        }
      ]
    },
    {
      "shortName": "Customer",
      "namespace": "MyApp",
      "autoGeneratedKeyType": "KeyGenerator",
      "defaultResourceName": "Customers",
      "dataProperties": [
        {
          "name": "id",
          "dataType": "Guid",
          "isNullable": false,
          "isPartOfKey": true
        },
        {
          "name": "name",
          "dataType": "String",
          "maxLength": 30
        },
        {
          "name": "location",
          "complexTypeName": "Address:#MyApp"
        }
      ],
      "navigationProperties": [
        {
          "name": "orders",
          "entityTypeName": "Order:#MyApp",
          "isScalar": false,
          "associationName": "AN_Customer_Order"
        }
      ]
    },
    {
      "shortName": "Order",
      "namespace": "MyApp",
      "autoGeneratedKeyType": "Identity",
      "defaultResourceName": "Orders",
      "dataProperties": [
        {
          "name": "id",
          "dataType": "Guid",
          "isNullable": false,
          "isPartOfKey": true
        },
        {
          "name": "customerID",
          "dataType": "Guid"
        },
        {
          "name": "date",
          "dataType": "DateTime"
        }
      ],
      "navigationProperties": [
        {
          "name": "customer",
          "entityTypeName": "Customer:#MyApp",
          "isScalar": true,
          "associationName": "AN_Customer_Order",
          "foreignKeyNames": [
            "customerID"
          ]
        },
        {
          "name": "items",
          "entityTypeName": "OrderItem:#MyApp",
          "isScalar": false,
          "associationName": "AN_Order_OrderItem"
        }
      ]
    },
    {
      "shortName": "OrderItem",
      "namespace": "MyApp",
      "autoGeneratedKeyType": "None",
      "defaultResourceName": "OrderItems",
      "dataProperties": [
        {
          "name": "id",
          "dataType": "Guid",
          "isNullable": false,
          "isPartOfKey": true
        },
        {
          "name": "orderID",
          "dataType": "Guid",
          "isNullable": false
        },
        {
          "name": "description",
          "dataType": "String",
          "isNullable": false
        },
        {
          "name": "price",
          "dataType": "Decimal",
          "isNullable": false
        }
      ],
      "navigationProperties": [
        {
          "name": "order",
          "entityTypeName": "Order:#MyApp",
          "isScalar": true,
          "associationName": "AN_Order_OrderItem",
          "foreignKeyNames": [
            "orderID"
          ]
        }
      ]
    }
  ],
  "resourceEntityTypeMap": {
    "Customers": "Customer:#MyApp",
    "Orders": "Order:#MyApp",
    "OrderItems": "OrderItem:#MyApp"
  }
}

关于javascript - 为多级 JSON 创建 Breeze 元数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33272011/

相关文章:

c# - 获取 json 元素的标签及其 id

android - Eclipse 不打开我的工作区

metadata - 获取维基数据项目查看次数/受欢迎程度指数

javascript - 从 JSON 文件中获取特定信息

java - 从数据库查询重新格式化 json

amazon-web-services - AWS S3 复制/粘贴不复制元数据

javascript - 如何将下拉区域与另一个下拉区域隔离

javascript - 将下拉列表或文本输入值保存在同一列中(使用 Laravel 5.5)

javascript - React (Native) 设置 Jest 来测试 Context 组件

javascript - 动态键名