3

我已经挣扎了几天,试图使用JSON Editor Javascript 插件。我正在使用SWIG JS 引擎,但我愿意接受可以解决我的问题的提议。

我创建了一个到目前为止运行良好的 JSON 模板,但这并没有完全实现我需要做的事情,我尝试理解和使用 JSON Editor github 页面提供的语法,但到目前为止还没有运气。

如何使模板的行为如下:

如果 features.type == "Point" 的值,那么我希望 features.display 具有 "#/definitions/marker" 类型的属性。否则(features.type == "Polygon")我希望 features.display 具有“#/definitions/area”类型的属性。filter.display 也是如此。

到目前为止,我使用“oneOf”属性,因为它最接近我想要的,但绝对不是。

谢谢你的帮助 !

亲切的问候。

到目前为止,这是我的 JSON 架构:

{
    "type": "array",
    "title": "Layers",
    "items": {
        "title": "Layer",
        "type": "object",
        "headerTemplate": "{{table.id.public_name}}",
        "properties": {
            "table":{"$ref": "#/definitions/table"},
            "features":{"$ref": "#/definitions/features"}
        }
    },
    "definitions": {
        "table": {
            "title": "Table Information",
            "type": "object",
            "properties": {
                "id":{"$ref": "#/definitions/id"},
                "primary_key":{"$ref": "#/definitions/primary_key"},
                "read":{"$ref": "#/definitions/read"}
            }
        },
        "features": {
            "title": "Features Settings",
            "type": "object",
            "properties": {
                "type":{"$ref": "#/definitions/type"},
                "id":{"$ref": "#/definitions/id"},
                "cols":{"$ref": "#/definitions/cols"},
                "display": {
                    "type": "object",
                    "title": "Display",
                    "format": "grid",
                    "oneOf": [
                        {"$ref": "#/definitions/marker"},
                        {"$ref": "#/definitions/area"}
                    ]
                }
            }
        },
        "cols": {
            "title": "Table Columns",
            "type": "array",
            "items": {
                "type": "object",
                "title": "Column",
                "properties": {
                    "id":{"$ref": "#/definitions/id"},
                    "read":{"$ref": "#/definitions/read"},
                    "write":{"$ref": "#/definitions/write"},
                    "filter":{"$ref": "#/definitions/filter"}
                }
            }
        },
        "id": {
            "title": "Identifier",
            "type": "object",
            "format": "grid",
            "properties": {
                "name":{"$ref": "#/definitions/name"},
                "public_name":{"$ref": "#/definitions/public_name"}
            }
        },
        "name": {
            "title": "Name",
            "type": "string"
        },
        "public_name": {
            "title": "Public Name",
            "type": "string"
        },
        "primary_key": {
            "title": "Primary key",
            "type": "string",
            "format": "grid"
        },
        "write": {
            "title": "Editing",
            "type": "object",
            "format": "grid",
            "properties": {
                "read":{"$ref": "#/definitions/read"},
                "method":{"$ref": "#/definitions/method"}
            }
        },
        "read": {
            "title": "Reading",
            "type": "array",
            "items": {
                "type": "integer",
                "title": "Access Level",
                "format": "grid",
                "properties":{"$ref": "#/definitions/access_level"}
            }
        },
        "type": {
            "title": "Type",
            "type": "string",
            "enum": [ "Point", "Polygon" ]
        },
        "access_level": {
            "title": "Access Level",
            "type": "integer",
            "format": "number"
        },
        "method": {
            "title": "Method",
            "type": "object",
            "format": "grid",
            "properties": {
                "type":{"$ref": "#/definitions/method_type"},
                "data":{"$ref": "#/definitions/data"}
            }
        },
        "data": {
            "title": "Data",
            "type": "array",
            "items": {
                "type": "string",
                "title": "Data",
                "format": "grid",
                "properties":{"$ref": "#/definitions/value"}
            }
        },
        "value": {
            "title": "Value",
            "type": "string"
        },
        "filter": {
            "title": "Filter",
            "type": "array",
            "items": {
                "type": "object",
                "title": "Filter",
                "properties": {
                    "value":{"$ref": "#/definitions/value"},
                    "display": {
                        "type": "object",
                        "oneOf": [
                            {"$ref": "#/definitions/marker"},
                            {"$ref": "#/definitions/area"}
                        ]
                    }
                }
            }
        },
        "marker": {
            "title": "Marker",
            "type": "object",
            "format": "grid",
            "properties": {
                "color":{"$ref": "#/definitions/color"},
                "icon":{"$ref": "#/definitions/icon"}
            }
        },
        "color": {
            "title": "Color",
            "type": "string",
            "enum": ["red", "darkred", "orange", "green", "darkgreen", "blue", "purple", "darkpuple", "cadetblue"]
        },
        "css_color": {
            "title": "CSS Color",
            "type": "string",
            "format": "color"
        },
        "icon": {
            "title": "Icon",
            "type": "object",
            "format": "grid",
            "properties": {
                "name":{"$ref": "#/definitions/name"},
                "color":{"$ref": "#/definitions/css_color"}
            }
        },
        "area": {
            "title": "Area",
            "type": "object",
            "properties": {
                "color":{"$ref": "#/definitions/color"},
                "border":{"$ref": "#/definitions/border"}
            }
        },
        "border": {
            "title": "Border",
            "type": "object",
            "properties": {
                "border_color":{"$ref": "#/definitions/border_color"},
                "width":{"$ref": "#/definitions/width"}
            }
        },
        "border_color": {
            "title": "Color",
            "type": "object",
            "format": "grid",
            "properties": {
                "normal":{"$ref": "#/definitions/normal"},
                "hover":{"$ref": "#/definitions/hover"}
            }
        },
        "width": {
            "title": "Width",
            "type": "string"
        },
        "normal": {
            "title": "Normal",
            "type": "string",
            "format": "color"
        },
        "hover": {
            "title": "Hover",
            "type": "string",
            "format": "color"
        },
        "method_type": {
            "title": "Type",
            "type": "string",
            "enum": [ "text", "select" ]
        }
    }
}
4

1 回答 1

2

强制执行此操作的唯一方法(直到出现 jsonschema 草案 5)是使用枚举作为鉴别器。您可以在如何在 JSON 模式中使用依赖项 (draft-04)中找到示例

于 2014-08-20T06:38:32.210 回答