javascript - 如何使用模板 lliteralls 多次创建包含数据的行?
问题描述
我正在使用 ES6 功能在 Vanilla JavaScript 中创建日历。
我有一个神奇的函数,它通过调用类渲染方法来创建元素,然后将字符串解析为节点元素。
现在,我创建了一个日组件和一个行组件。
我正在导入行内的日期,我需要做的是在其中显示日历行,因此总共应该显示 4-5 行,其中 28-31 天在行内划分。
像这样的东西:
renderDays() {
// Weeks
for(var j = 0; j < 5; j++) {
const row = day % 7 == 0;
var html
html += ' ${row ? "<div class="cal__cell-row">" : " "} ';
// Days
for (var i = 0; i < 28; i++) {
createElement(day);
}
html += ' ${row ? "</div>" : " "} '
}
}
然后在我的渲染中我有
render() {
return /*html*/`
<div data-child="row" class="cal__cell-row">
${this.renderDays()}
</div>
`;
}
我怎样才能使这项工作?在 ES5 中,它只是将它附加或添加到变量中,但是应该如何按照这种方式创建呢?
解决方案
要使用模板文字,您必须使用反引号 ``(Esc 键下方的那个)
您正在使用引号,但它并不${}
像您期望的那样。
如果您想遵循问题中提到的 Es6 实践,您也可以使用let
而不是。var
renderDays() {
let html = ''; // consider scoping the variables correctly
// Weeks
for(let j = 0; j < 5; j++) {
const row = day % 7 == 0;
html += ` ${row ? '<div class="cal__cell-row">' : ' '} `;
// Days --- potentially incorrect logic as you are looping inside each row 28 times, or 5*28 times in total ?
for (let i = 0; i < 28; i++) {
createElement(day); // possibly you mean html+= createElement(day) ?
}
html += ` ${row ? '</div>' : ' '} `
}
// console.log(html)
return html;
}
推荐阅读
- php - 在多个相关表中执行满足条件的 Laravel Eloquent 'select' 语句
- karate - 如何在空手道中使用 for 循环
- php - 教义迁移问题
- google-sheets - 基于其他行数据的谷歌表格第一行?
- java - 生产者消费者使用可重入锁不起作用
- javascript - ECMAScript 规范是否允许 Array 成为“超类”?
- ios - 根据另一个结果创建一个 URLSession
- google-cloud-platform - 移动数据时数据流优于云功能的好处?
- python - 仅将日期和时间(小时 x 分钟 x 秒)转换为时间
- kotlin - 可能非常愚蠢的 Kotlin 构造函数想法