LINUX.ORG.RU

Сделать формы из не совсем json

 , ,


0

2

Для начала начну с не совсем приятного, многие js скрипты cоздают формы для json, при наличии schema и так далее. У меня же данные не совсем в таком виде.
Вот например, что такого рода скрипты хотят:

{
  "schema": {
    "Name": {
      "title": "Name",
      "description": "Item name",
      "type": "string"
    },
    "Price": {
      "title": "Price",
      "description": "Item price",
      "type": "number"
    },
    "CountAvailable": {
      "title": "Count",
      "description": "Count available",
      "type": "number"
    },
    "DiscountPercent": {
      "title": "Discount",
      "description": "Discount percent",
      "type": "number"
    },
    "Description": {
      "title": "Description",
      "description": "Item description",
      "type": "string"
    },
    "SerialNumber": {
      "title": "Serial Number",
      "description": "Item identification number",
      "type": "number"
    },
    "id": {
      "title": "ID",
      "description": "Item number in the database",
      "type": "number"
    }
  }
}
А вот что у меня:
[
  {
    "Name": "Test",
    "Price": 1,
    "CountAvailable": 1,
    "DiscountPercent": 1,
    "Description": "High resolution",
    "SerialNumber": 3340,
    "id": 1
  },
  {
    "Name": "Test2",
    "Price": 200,
    "CountAvailable": 5,
    "DiscountPercent": 0.25,
    "Description": "Low resolution",
    "SerialNumber": 564560,
    "id": 2
  }
]
Потом мне хотелось бы не только преобразовывать формы, но и вставить в них данные со значениями.
Стоит ли преобразовывать в json со schema внутри js, учитывая то, что формы собственно одни и теже самые во всех элементах, т.е. по идеи можно просто сделать форму для них всех, в потом вставлять значения.
Вопрос собственно, как сделать лучше и проще и правильней или возможно вообще есть готовые решения.
Cast Vit

★★★★★

Последнее исправление: anonymous_sama (всего исправлений: 1)

Я подумал и делать что-то вроде Tree Style Tab интерфейса для каждого элемента плохая идея. Лучше сделать поиск на имени, id и серийному номеру. Благо api это позволяет. То есть в большой мере стоит вопрос, как лучше делать форму из не совсем json, без схемы.

anonymous_sama ★★★★★
() автор топика
Ответ на: комментарий от makoven

Все js скрипты которые преобразуют json в формы, которые я смотрел, хотят то, что ты видишь сверху. Т.е. со schema и с выделенным каждым элементом.

anonymous_sama ★★★★★
() автор топика
Ответ на: комментарий от anonymous_sama

Ну либо приведи свой json к первому виду. либо заполни форму по старинке, кодом

Вот тебе, например, хелпер для второго варианта

function $els(node) {
    let iter = document.createNodeIterator(node, NodeFilter.SHOW_ELEMENT, null);
    let $els = {}, child;
    while (child = iter.nextNode()) {
        let attr = child.attributes["data-el"];
        if (attr) $els[attr.value] = child;
    }
    return $els;
}
пример
<details class="group">
  <summary>
    <input type="checkbox" data-el="$chbox">
    <img src="icon_settings.png" data-el="$settings">
    <span class="group-name" data-el="$name"></span>
    <span class="group-info"></span>
  </summary>
</details>
$els(document.querySelector(".group")) вернет объект { $chbox: <input element>, $settings: <img element>, $name: <span element> }

makoven ★★★★★
()
Последнее исправление: makoven (всего исправлений: 4)

Тут обычная задача, данные преобразовать, и форму на ходу слепить, делов-то. Нечего обсуждать. Ну или уточни что конкретно вызывает сложности.

А если браузер новый, там еще FormData.append() есть.

Vit ★★★★★
()
Ответ на: комментарий от Vit

Тут собственно, проблема была скорей в том, что когда мне понадобилось преобразовывать данные, я подумал, что я уже что-то неправильно делаю, если до такого дошло. Ну и плюс изначально идея была более сумасшедшей (пост до редактирования), но я от нее вскоре отказался, потому-что она была плохая, особенно если учесть что я не смогу предсказать сколько данных будет.

anonymous_sama ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.