Как в теле скрипта задать вывод шаблона ejs c элементом массива?

128
23 марта 2022, 23:40

Пробую динамически добавлять данные в таблицу. Данные mdata берутся из схемы mongoose. Возникает ошибка синтаксиса в следующей строке: var obj = <%- mdata.EcrACQTask[${i}]._id %>; На стороне клиента в браузере ругается на индекс, а точнее на конструкцию ${i}. Если подставить значение индекса, например <%- mdata.EcrACQTask[0]._id %>, то всё корректно работает. Подскажите пожалуйста, как это правильно сделать?

<script  type = "text/javascript">
    var table = document.getElementById("mdTable"); // table
    var newRow = table.insertRow(table.rows.length);  
    var th  = newRow.insertCell(0);
    for (var j = 0; j < 4; j++){  
        for(var i = 0; i < '<%- mdata.EcrACQTask.length %>'; i++){  
            var newRow = table.insertRow(table.rows.length);                          
            var th  = newRow.insertCell(0);  // th
            var td1 = newRow.insertCell(1);  // td
            var td2 = newRow.insertCell(2);  // td 
            var td3 = newRow.insertCell(3);  // td

            var obj = `<%- mdata.EcrACQTask[${i}]._id %>`;
            alert (obj);
        }
    }
</script>
Answer 1

.<%- %> нужен для include...
используйте <% name %>

Answer 2

Вобщем пришлось переделать с применением шаблонизатора EJS вместо вставки JS. Только я так понял, что шаблонизатор EJS не поддерживает конструкцию "switch case". Или всё-таки я ошибаюсь? У меня с применением "switch case" происходит ошибка компиляции. Если применить через "if-else", то всё работает.

<% for (var j = 0; j < 4; j++ ) {%> 
   
   <% for (var i = 0; i < mdata.EcrACQTask.length; i++ ) {%> 
   
     <tr> 
        <th scope="row"></th>                         
 
        <% if (j == 0) { %>                             
 
           <td> ecrACQTaskID.<%- mdata.EcrACQTask[i].index %></td> 
           <td> <%- mdata.EcrACQTask[i]._id %></td> 
           <td> Task id </td> 
 
        <% } else if (j == 1) { %>                             
 
           <td> ecrACQTaskType.<%- mdata.EcrACQTask[i].index %></td> 
           <td> <%- mdata.EcrACQTask[i]._type[0].title %></td> 
           <td> Task type </td> 
 
        <% } else if( j == 2) { %> 
 
           <td> ecrACQTaskFirst.<%- mdata.EcrACQTask[i].index %></td> 
           <td> <%- mdata.EcrACQTask[i].first %></td> 
           <td> First task </td> 
 
        <% } else if(j == 3) { %> 
 
           <td> ecrACQTaskNum.<%- mdata.EcrACQTask[i].index %></td> 
           <td> <%- mdata.EcrACQTask[i].num %></td> 
           <td> Task priority </td> 
 
        <% } %>         
      
     </tr> 
 
   <% } %> 
 
<% } %>

READ ALSO
Проверка input на введенное число

Проверка input на введенное число

У меня есть inputс типом number

82
Как проверить несколько input на введенные значения

Как проверить несколько input на введенные значения

В общем, у меня есть input'ы в количестве 9-ти штукВ каждом из них при отправке должно быть конкретное число (здесь что-то в роде мини-игры, где...

147
Как работает BETWEEN в MySQL?

Как работает BETWEEN в MySQL?

Встретился с дилеммойВ некоторых ситуациях оператор BETWEEN включают вторую дату ДО, а в некоторых нет

103
Помогите с запростом Mysql

Помогите с запростом Mysql

делаю фильтры, У МЕНЯ ТАКОЙ запрос,

98