Ошибки конкатенации строк в ejs / node.js

У меня возникают проблемы с загрузкой пользовательского шрифта при использовании ejs. Я не думаю, что проблема в самом шрифте, но если вам интересно, источник:

https://github.com/andrewgioia/Keyrune

Я думаю, проблема в том, как отображается тег html при объединении класса с помощью ejs.

документ ejs:

<body>

<i class = "ss ss-6x"> </i> 
// default symbol correct size


<i class = "ss ss-6x ss-lea"> </i> 
// correct symbol/size 
//html renders as <i class = "ss ss-6x ss-lea"> </i>

<i class=<%= "ss ss-6x ss-" + sets[0].setCode %>> </i> 
// default symbol shows up in wrong font size
// html renders as <i class = "ss" ss-6x ss-lea> </i> 

<i class=<%= "ss " + "ss-6x " + "ss-" + sets[0].setCode%> > </i> 
// default symbol shows up in wrong font size
// html still renders as <i class = "ss" ss-6x ss-lea> </i> 


<% console.info(sets[0].setCode); %> 
// prints as 'lea' 


</body>

маршрут узла (здесь нет проблем):

app.get('/', function(req, res) {
  con.query('SELECT * FROM mtgSets', function(error, rows, fields) {
    if (error) throw error;
    sets = rows;
    console.info(sets[0].setCode); //prints as lea 
    res.render('test', {sets: sets});
  });
});

Решение: кавычки заключаются в квадратные скобки "<% =%>"!

<i class = "<%= 'ss ss-6x ss-' + sets[0].setCode %>" > </i>
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
627
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы пробовали последовательно форматировать свой html - похоже, у вас есть небольшое несоответствие с вашими одинарными и двойными кавычками, и не все имеет начальную или конечную цитату.

Я обычно использую двойные кавычки на стороне HTML и одинарные кавычки на стороне JS.

Так что-то вроде:

<i class=<%= 'ss ' + 'ss-6x ' + 'ss-' + sets[0].setCode%> > </i>

Становится

<i class = "<%= 'ss ' + 'ss-6x ' + 'ss-' + sets[0].setCode%>" > </i>

И

<i class=<%= "ss ss-6x ss-" + sets[0].setCode %>> </i>

Становится

<i class = "<%= 'ss ss-6x ss-' + sets[0].setCode %>"> </i>

Проблема заключалась в том, что я не знал, что вы можете заключать кавычки вокруг <%%>. Спасибо!

Lord Elrond 10.01.2019 18:41

@ Джейн, пожалуйста. Это распространенная ошибка, которую все мы делаем гораздо чаще, чем хотелось бы :)

Darren Wainwright 10.01.2019 18:44

Другие вопросы по теме