javascript - 小胡子类型错误:模板无效!模板应该是“字符串”但“未定义”
问题描述
我正在学习 mustache.js 客户端模板,但效果不是很好。在以下代码示例中,我尝试根据所选年份选项在表格中显示学生列表。
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Test</title>
<script src="/js/jquery-3.4.1.min.js"></script>
<script src="/js/mustache.min.js"></script>
</head>
<body>
<div class="container" style="margin-top:3%">
<label>Year</label>
<select id="year" onchange="refreshList(this)">
<option value=""></option>
<option value="2019">2019</option>
<option value="2018">2018</option>
</select>
<br /><br />
<table>
<thead>
<tr>
<th>Registered Date</th>
<th>Name</th>
<th>Age</th>
</tr>
</thead>
<tbody id="studentsList">
<script type="text/template" id="studentsTemplate">
{{#students}}
<tr class='row_{{id}}'>
<td>{{registered}}</td>
<td>{{name}}</td>
<td>{{age}}</td>
</tr>
{{/students}}
</script>
</tbody>
</table>
</div>
<script>
var testing = {
"name" : "student-collection",
"students" : [
{
"id" : 97,
"registered" : "2018-03-01",
"name" : "John",
"age" : 20
},
{
"id" : 118,
"registered" : "2019-04-01",
"name" : "Mary",
"age" : 21
},
{
"id" : 509,
"registered" : "2018-08-01",
"name" : "Dave",
"age" : 19
}
]
};
function inYear(registerYear){
return function(student){
var date = new Date(student.registered);
return date.getFullYear() == Number(registerYear);
}
}
function refreshList(selected){
var filters = testing.students.filter(inYear(selected.value));
var html = Mustache.render($('#studentsTemplate').html(), {students : filters});
var list = $("#studentsList");
list.empty();
list.append(html);
}
function refreshList2(selected){
var filters = testing.students.filter(inYear(selected.value));
var html = Mustache.render($('#studentsTemplate').html(), {students : filters});
document.getElementById("studentsList").innerHTML = html;
}
</script>
</body>
</html>
当我第一次选择“年份”下拉菜单时,表格确实显示正确。但是,如果之后选择了下拉列表中的不同年份,则会出现“TypeError:无效模板!模板应该是“字符串”但“未定义”作为第一个参数给出...”错误。
我认为这是因为当我清空函数中的“studentsList”时,“studentsTemplate”已被删除refreshList()
。如果我像在 refreshList2() 中那样直接设置 innerHTML 也无济于事。
如何在不影响“studentsTemplate”模板的情况下清除表中的学生行?
解决方案
推荐阅读
- google-sheets - 如何不计算不包含文本的工作表中的单元格?
- fortran - 在 Fortran 中删除
- python - 无法让 python-can-viewer 运行
- three.js - ThreeJS:如何将一个对象的旋转克隆到另一个对象
- c# - 使用 C# 中的存储过程输出参数获取列值
- php - 如果我们的应用程序位于反向代理后面,如何获取访问者的真实 IP?
- python - 如何在“r”原始字符串中包含变量
- javascript - 每秒刷新一次图表数据javascript
- cmake - 单行makefile中的“makefile:1:***缺少分隔符”
- c# - 根据另一个列表对列表进行排序