Я пытаюсь использовать шаблонные / строковые литералы для шаблонов, я смотрел несколько видео на эту тему и следил за этим отличным учебником.
Я думал, что это будет довольноПрохладный с многоразовыми кусками, потому что некоторые элементы встречаются несколько раз.
Функция шаблона
function templater(strings, ...keys) {
return function(data) {
let temp = strings.slice();
keys.forEach((key, i) => {
temp[i] = temp[i] + data[key];
});
return temp.join('');
}
};
Пример кусков
let contentHead = `
<header>
${'myHeader'}
</header>
`
let contentFooter = `
<footer>
${'myFooter'}
</footer>
`
Шаблон, который упакован со всеми необходимыми патронами
let contentTemplate = templater`
<div>
${'contentHead'}
${'contentFooter'}
</div>
`
Здесь я устанавливаю данные для шаблона
const content = {
myHeader: 'This is my header',
myFooter: 'This is my footer',
contentHead: contentHead,
contentFooter: contentFooter,
}
Вот как я проверяю код
const myTemplate = contentTemplate(content);
console.log(myTemplate);
Выход будет
<div>
<header>
myHeader
</header>
<footer>
myFooter
</footer>
</div>
Если ясделайте это без вызова таких переменных, как эта
let contentTemplate = templater`
<div>
<header>
${'myHeader'}
</header>
<footer>
${'myFooter'}
</footer>
</div>
const content = {
myHeader: 'This is my header',
myFooter: 'This is my footer'
}
Вывод будет правильным
<div>
<header>
This is my header
</header>
<footer>
This is my footer
</footer>
</div>
Так почему это не работает, я вызываюдве строковые литеральные переменные в объекте JSON, который затем используется в функции templater, не работает, потому что эти два блока передаются в oза пределами помеченной функции шаблона, а затем переключился на шаблон без какого-либо собственного содержимого?
Как я могу исправить это наилучшим из возможных способов?:)