Массив SchemaForm условный - PullRequest
       26

Массив SchemaForm условный

0 голосов
/ 30 апреля 2018

Фон

Я делаю форму, используя http://schemaform.io/

Настройка

Я пытаюсь создать массив объектов, которые пользователь может создать с помощью формы. Таким образом, пользователь может добавить в массив столько элементов, сколько он хочет.

Массив элементов содержит тип, а затем другое поле в зависимости от типа.

Если пользователь нажимает REST, я хочу, чтобы он предложил поле с именем method.

Если пользователь нажимает SSH, я хочу, чтобы он предложил поле с именем path.

Код пока

SCHEMA

{
  "type": "object",
  "title": "Command Asset",
  "properties": {
    "name": {
      "title": "Name",
      "type": "string"
    },
    "commands": {
      "type": "array",
      "title": "Actions",
      "items": {
        "type": "object",
        "properties": {
          "commandType": {
            "title": "Command Type",
            "type": "string",
            "enum": [
              "REST",
              "SSH"
            ]
          },
          "path": {
            "title": "Path",
            "type": "string"
          },
          "method": {
            "title": "Method",
            "type": "string"
          }
        }
      }
   }
  }
}

ФОРМА

[
  {
    "type": "help",
    "helpvalue": "<h5>Command</h5>"
  },
  "name",
  {
    "title":"Command",
    "key": "commands",
    "items": [
      "commands[].commandType",
      {
        "type": "conditional",
        "condition": "modelData.commands[0].commandType=='SSH'",
        "items": [
          {
            "key": "commands[].path"
          }
        ]
      },
      {
        "type": "conditional",
        "condition": "modelData.commands[0].commandType=='REST'",
        "items": [
          {
            "key": "commands[].method"
          }
        ]
      }
    ]
  }
]

Этот код можно проверить здесь: http://schemaform.io/examples/bootstrap-example.html

Вопрос

Как видно, код, который у меня есть, теперь устанавливает все вторичные свойства элементов (path или method) в зависимости от первого элемента в массиве commandType (в [0]), но я хочу это зависит от commandType соответствующего элемента. Таким образом, если элемент один имеет commandType REST, он предлагает поле method, а если элемент два имеет тип команды SSH, он предлагает поле path и т. Д.

1 Ответ

0 голосов
/ 30 апреля 2018

Я нашел ответ.

Заменить [0] на [arrayIndex].

Я нашел его отсюда: https://github.com/json-schema-form/angular-schema-form/commit/21f6d3ab64435b032456dfe19e03f96b29366320

...