JSON Schema - 如何根据其他布尔值更改布尔值使用条件

问题描述 投票:0回答:1

我尝试创建新表单,其中有几个布尔切换按钮,如果更改,某些按钮将跟随另一个按钮值

我尝试制作一个带有多个开关的表单,例如有2个开关

切换A和B

如果开关 A 为真,则开关 B 将启用,用户可以更改值, 如果开关 A 为 false,则开关 B 将被禁用,并且值将自动更改为 false

我尝试使用“allOf”来完成此任务,但它只能更改禁用/启用开关 这是我尝试过的

{
   "type": "object",
   "title": "switchMode",
   "properties": {
     "switchA":{
        "type": "boolean",
        "title": "Swith A",
        "description" : "if switch A is true, switch B will be enable and user can change value, if switch A is false, switch B will be disabled and value will change to false",
        "default": true
      },
      "switchB":{
        "type": "boolean",
        "title": "Swith B",
        "description" : "switch B value and enable/disable is depend on switch A current value",
        "default": false
      }
    },
    "allOf": [
        {
          "if": {
            "properties": {
              "switchA": {
                "type": "boolean",
                "const": false
              }
            }
          },
          "then": {
            "properties": {
              "switchB": {
                "type": "boolean",
                "readOnly": true
              }
            }
          }
        }
      ]
}

我尝试使用几种东西,但它不像在之后添加一些值那样有效

"readOnly": true
与此:
"const": false
"value":  false
"default": false
"enum": [ false ] 

有没有办法在将

switchB
的值更改为
false
后将
switchA
的开关值更改为
false

jsonschema
1个回答
0
投票

在我看来,跨属性依赖表明早期决策有些次优。虽然我没有使用 jsonschema(而是使用其他 XML 模式定义),但模式定义的总体思路是保持较高的级别,我在这里概述了这一点:

您要么有场景 a 结构,要么有场景 b 结构,并且在其中一个中该标志是强制性的,而在另一个中则不存在该标志。抵制住诱惑,要求它使用固定值,因为这会让您在以后对模式进行更改时需要进行大量修改。

应该在处理json数据的代码中相应地设置标志的值,在场景a中取给定值,在场景b中无条件地取给定值,最好在一个地方。

© www.soinside.com 2019 - 2024. All rights reserved.