Я пытаюсь перебрать вложенный объект JSON, используя .map()
, и вывести разные шаблоны HTML в зависимости от JSON inputType: "value"
. Я хочу использовать правильный шаблон (литерал шаблона es6) на основе Тернарного оператора и добавить правильный HTML в DOM.
Я продвинулся довольно далеко, но у меня возникла проблема с Уровнем 6 (шаблон формы) и Уровнем 7 (шаблоны ввода). Может кто-то указать мне верное направление?
Codepen: https://codepen.io/oneezy/pen/GxENOr а>
JS (полный javascript был опущен.. см. codepen)
/* FORM (Level 6)
⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼ */
function formTEMPLATE(form) {
return `
${form.map(function(form) {
return `
${form.inputType['text'] ? textfieldTEMPLATE(form.inputType) : ''}
${form.inputType['select'] ? selectTEMPLATE(form.inputType) : ''}
${form.inputType['radio'] ? radioTEMPLATE(form.inputType) : ''}
${form.inputType['checkbox'] ? checkboxTEMPLATE(form.inputType) : ''}
`}).join('')}`
}
/* ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ INPUT TEMPLATES ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ */
/* TEXTFIELDS (Level 7)
⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼ */
function textfieldTEMPLATE(text) {
return `
${text.map(function(text) {
return `
<label>${text.labelText}</label>
<input type="${text.inputType}" id="${text.inputId} name="${text.inputClass}">
`}).join('')}`
}
/* SELECT MENU (Level 7)
⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼ */
function selectTEMPLATE(select) {
return `
<select class="select">
${select.map(function(select) {
return `
<option id="${select.inputID} name="${select.inputGROUP}" ${select.inputOPTION}">${select.inputLABEL}</option>
`}).join('')}
</select>`
}
/* RADIO (Level 7)
⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼ */
function radioTEMPLATE(radio) {
return `
<ul class="radio">
${radio.map(function(radio) {
return `
<li>
<input type="${radio.inputTYPE}" id="${radio.inputID}" name="${radio.inputGROUP}" ${radio.inputOPTION}>
<label for="${radio.inputID}">${radio.inputLABEL}</label>
</li>
`}).join('')}
</ul>`
}
/* CHECKBOX (Level 7)
⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼ */
function checkboxTEMPLATE(checkbox) {
return `
<ul class="checkbox">
${checkbox.map(function(checkbox) {
return `
<li>
<input type="${checkbox.inputTYPE}" id="${checkbox.inputID}" name="${checkbox.inputGROUP}" ${checkbox.inputOPTION}>
<label for="${checkbox.inputID}">${checkbox.inputLABEL}</label>
</li>
`}).join('')}
</ul>`
}
JSON (полный json был опущен.. см. codepen)
[
{
"appLabel": "App",
"appFolders": [
{
"folderLabel": "Folder",
"folderFiles": [
{
"fileLabel": "File",
"fileSections": [
{
"sectionLabel": "Select Menu",
"sectionGroups": [
{
"groupLabel": "Group",
"groupInputs": [
{
"labelText": "Select 1",
"inputType": "select",
"inputId": "select1",
"inputClass": "select-1",
"inputCollection": [
{
"collectionLabelText": "Option 1",
"collectionInputType": "select",
"collectionInputId": "option1",
"collectionInputClass": "option-1",
"collectionInputName": "select-name-1"
},