2014-07-19 85 views
2

我一直在掙扎幾天,試圖使用JSON Editor Javascript插件。我正在使用SWIG JS engine,但我願意解決我的問題。JSON模式模板和JSON編輯器

我創建了一個到目前爲止工作正常的JSON模板,但這並沒有完全實現我需要做的,並且我嘗試瞭解和使用JSON編輯器github頁面提供的語法,但目前爲止沒有運氣。

如何使模板表現爲如下:

如果features.type ==「點」,那麼我想features.display有類型的屬性值「#/定義/標記」。否則(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" ] 
     } 
    } 
} 

回答

1

執行本(直到appareance jsonschema草案5)的唯一方法是使用枚舉作爲鑑別。你可以在How to use dependencies in JSON schema (draft-04)

+0

找到一個例子謝謝你的建議!我結束了對多個文件的引用,創建了兩個分支層次結構,並在插件初始化時選擇了正確的體系結構。不能等待草稿5,這會讓生活變得更容易! – user3856210