Схема JSON - раскрывающийся список на основе выбранного значения, другой раскрывающийся список - PullRequest
0 голосов
/ 09 ноября 2018

Допустим, у меня есть следующая структура данных

Option A
Option B
    Option B1
        Option B2.1
        Option B2.2

Я пытаюсь создать структуру enums, которая позволяет это, чтобы я мог создать раскрывающийся список на основе значения предыдущего выбранного раскрывающегося списка.

Примеры:

Select option A -> No additional dropdowns
Select option B -> Generate dropdown with Option B1
Select option B1 -> Generate dropdown with Option B2.1 and Option B2.2

Это будет работать, если вы хотите создать массив с детьми, есть ли что-нибудь подобное для перечислений

{
  "$schema": "http://json-schema.org/draft-07/schema#",

  "definitions": {
    "medicine": {
      "type": "object",
      "properties": {
        "value": { "type": "string" },
        "categories": {
          "type": "array",
          "items": { "$ref": "#/definitions/medicine" }
        }
      }
    }
  },
  "properties": {
    "person": { "$ref": "#/definitions/medicine" }
  }

}

И тогда структура перечисления будет примерно такой

[
     { 
        "value ":  "Option A" 
     }, 
     { 
        "value ":  "Option B ", 
        "categories ": [ 
         { 
            "value ":  "Option B1 ", 
            "categories ": [ 
             {
                "value ":  "Option B1.1" 
             }, 
             { 
                "value ":  "Option B1.2" 
             } 
           ] 
         } 
       ] 
    }
]

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

1 Ответ

0 голосов
/ 14 ноября 2018

Рассматривали ли вы выравнивание структуры, чтобы было проще искать опции и подопции?

Давайте представим, что у вас есть исходный массив для корневых опций:

[
  'opt_a',
  'opt_b'
]

Затем у вас есть сплющенная карта всех опций, из которых вы можете получить метки и последующие выпадающие списки:

{
  opt_a: {
    label: 'Option A'
  },
  opt_b: {
    label: 'Option B',
    children: ['opt_b1']
  },
  opt_b1: {
    label: 'Option B1',
    children: ['opt_b11', 'opt_b12']
  }
  opt_b11: {
    label: 'Option B1.1'
  }
  opt_b12: {
    label: 'Option B1.2'
  }
}

Надеюсь, это отвечает на ваш вопрос и говорит само за себя.

...