L oop через поле массива в схеме mongoose - PullRequest
0 голосов
/ 03 августа 2020

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

this это мои маршруты. js

router.get('/setup', (req, res,next) => { 

  Community.find(function(err, data) {
    res.render('setup', {
        community: data,

    });
});
});

это моя схема сообщества

const CommunitySchema = new mongoose.Schema({
  name: {
    type: String
  },
  department: [{
    type: String
  }]
    
});

и это мои настройки. js

 <label for="fullname"><strong>What department do you belong to ?</strong></label>
                    <select class="form-control" id="community" name="community">
                     <optgroup label="Select Table">
                     <% community.forEach(function (practice) { %>
                       
                     <option >  <%= practice.department.pop() %>   </option>  
                     <% }) %>>
                     </optgroup>
                    </select>

** это данные **

{
"name":"Engineering",
"departments":[ "Electrical engineering", "Mechanical engineering", "Chemical engineering" ]
},
{
"name":"Arts",
"departments":[ "Philosophy", "Theatre arts", "English" ]
}

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

1 Ответ

0 голосов
/ 04 августа 2020

Не выполняйте операцию pop над своим массивом,

Попробуйте этот способ, код может выдать синтаксические ошибки, но идея состоит в том, что вам следует oop поверх массива departments, чтобы создать параметры внутри select element.

<label for="fullname"><strong>What department do you belong to ?</strong></label>
<select class="form-control" id="community" name="community">
    <optgroup label="Select Table">
        <% community.forEach(function (practice) { %>
            <% practice.departments.forEach(function (dept) { %>
                <option>  <%= dept %>   </option>
            <% }) %>> 
        <% }) %>>
    </optgroup>
</select>

.

(мое предположение ниже)

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

|- Engineering
|--- Electrical engineering
|--- Mechanical engineering
|--- Chemical engineering
|- Arts
|--- Philosophy
|--- Theatre arts
|--- English

используйте следующие

<label for="fullname"><strong>What department do you belong to ?</strong></label>
<select class="form-control" id="community" name="community">
    <% community.forEach(function (practice) { %>
        <optgroup label="<%= practice.name %>">
            <% practice.departments.forEach(function (dept) { %>
                <option>  <%= dept %>   </option>
            <% }) %>> 
        </optgroup>
    <% }) %>>
</select>
...