【发布时间】:2018-09-06 13:02:09
【问题描述】:
我正在尝试使用 .map() 迭代嵌套的 JSON 对象,并根据 JSON inputType: "value" 输出不同的 HTML 模板。我想使用基于 三元运算符 的正确模板 (es6 模板文字) 并将正确的 HTML 标记到 DOM。
我已经走了很远,但我遇到了 Level 6(表单模板)和 Level 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"
},
【问题讨论】:
-
你遇到了什么问题?
-
对不起,我不明白你的问题?
-
我的“表单输入”没有显示
标签: javascript json ecmascript-6 ternary-operator template-literals