Как я могу добиться, чтобы все флажки в jsonschema были включены после того, как я установил переключатель?

Окей. У меня есть jsonschema, как показано ниже. Я пытаюсь получить все элементы (цвета - флажки) по умолчанию, если отмечен переключатель "ДА". Напротив, если нажать кнопку "НЕТ", все цвета будут сняты.

JsonSchema

{
  "title": "Item Type Filtering Form",
  "description": "Form for filtering Item Types according to selected Attribute Values.",
  "type": "object",
  "properties": {
    "colorAll": {
      "type": "boolean",
      "title": "Seat Color All",
      "enum": [
        false,
        true
      ],
      "enumNames": [
        "NO",
        "YES"
      ],
      "default": true
    },
    "colorList": {
      "type": "array",
      "title": "Seat Color",
      "items": {
        "type": "object",
        "enum": [
          {
            "id": 1,
            "label": "RED"
          },
          {
            "id": 2,
            "label": "BLUE"
          },
          {
            "id": 3,
            "label": "GREEN"
          }
        ],
        "enumNames": [
          "RED",
          "BLUE",
          "GREEN"
        ]
      },
      "uniqueItems": true
    }
  }
}

UISchema

{
  "colorAll": {
    "ui:widget": "radio",
    "ui:options": {
      "inline": true
    }
  },
  "colorList": {
    "ui:widget": "checkboxes",
    "ui:options": {
      "inline": true
    }
  }
}

Я практикую это на странице https://mozilla-services.github.io/react-jsonschema-form/ но ни одна из моих попыток не работает так, как я описал выше...

Я подумал, что могу сделать это с ключевым словом "default:" и поместить в него все значения -> JsonSchema проверена, но это не сработало.

Может ли кто-нибудь помочь мне с этим?

1 ответ

В настоящее время это не представляется возможным

{
  "title": "Schema dependencies",
  "description": "These samples are best viewed without live validation.",
  "type": "object",
  "properties": {
    "conditional": {
      "title": "Conditional",
      "$ref": "#/definitions/person"
    }
  },
  "definitions": {
    "person": {
      "title": "Person",
      "type": "object",
      "properties": {
        "colorAll": {
          "type": "string",
          "enum": [
            "No",
            "Yes"
          ],
          "default": "No"
        }
      },
      "required": [
        "colorAll"
      ],
      "dependencies": {
        "colorAll": {
          "oneOf": [
            {
              "properties": {
                "colorAll": {
                  "enum": [
                    "Yes"
                  ]
                },
                "colorList": {
                  "type": "array",
                  "title": "Seat Color",
                  "items": {
                    "type": "string",
                    "enum": [
                      "RED",
                      "BLUE",
                      "GREEN",
                      "Yes Only",
                      "ABC"
                    ]
                  },
                  "default": [
                    "RED",
                    "BLUE",
                    "Yes Only"
                  ],
                  "uniqueItems": true
                }
              }
            },
            {
              "properties": {
                "colorAll": {
                  "enum": [
                    "No"
                  ]
                },
                "colorList": {
                  "type": "array",
                  "title": "Seat Color",
                  "items": {
                    "type": "string",
                    "enum": [
                      "RED",
                      "BLUE",
                      "GREEN"
                    ]
                  },
                  "uniqueItems": true
                }
              }
            }
          ]
        }
      }
    }
  }
}

если вы запустите вышеперечисленное на детской площадке, список цветов изменится, но он не выберет цвета по умолчанию. но если у вас есть colorList имеет автономный компонент, он выбирает по умолчанию.

Чтобы изменить выбранные значения по умолчанию, вам необходимо использовать свойство onChange формы (https://react-jsonschema-form.readthedocs.io/en/latest/) и обработать эту логику на твой собственный. Таким образом, вы можете проверить, был ли переключатель переключен на true или false, и если да, установитеcolorList к

[
    {
        "id": 1,
        "label": "RED"
    },
    {
        "id": 2,
        "label": "BLUE"
    },
    {
        "id": 3,
        "label": "GREEN"
    }
]

или [] соответственно.

Обратите внимание на следующее предупреждение в документе:
WARNING: If you have situations where your parent component can re-render, make sure you listen to the onChange event and update the data you pass to the formData attribute.

Вот пример кода, который я настроил, который управляет двумя свойствами:
https://codepen.io/anon/pen/VOjJmY
Также обратите внимание, что, поскольку фактическое значение является объектом, я думаю, вам придется повторно использовать тот же объект (отсюда и прямой использованиеschema.properties.colorList.items.enum).

Я думаю, что есть ошибка с формой схемы React JSON, потому что состояние пользовательского интерфейса флажков не обновляется в правильном жизненном цикле или что-то в этом роде. Состояние обновляется правильно, но я не могу отключить все / переключить все, чтобы произошло правильное состояние, а скорее следующий переключатель... Как при переходе от "ДА" -> "НЕТ" -> "ДА" "они все выключаются, а затем, переходя от" ДА "->" НЕТ ", они снова включаются...

Другие вопросы по тегам