node.js - Express-Handlebars 正在将我的数组数组合并成一个字符串?
问题描述
你能帮忙吗,这是最奇怪的..
我有一个自定义类,它包含多个属性,其中一个是数组数组。
我知道数据结构没问题,因为我可以将它转储到 console.log,并且 app.send() 会在我的浏览器中生成一个格式良好的数组。
奇怪的是,当我尝试渲染它时,数据浏览器是正确的,它不再是一个数组数组,它根本不是一个数组,只是一个逗号分隔的字符串......
所以从
[[day,1,2,3],[day,1,2,3],[day,1,2,3]]
至
day,1,2,3,day,1,2,3,day,1,2,3
连外阵都没有了。?
有任何想法吗?我错过了一些设置吗?
在此先感谢,鲍勃。
用一些代码更新.. app.js
app.set('view engine', 'hbs');
app.engine('hbs', hbs({
extname: 'hbs',
defaultLayout: 'layout',
layoutsDir: __dirname + '/views/layouts/',
partialsDir: __dirname + '/views/partials/',
helpers:{
json: function (context){return JSON.stringify(context); }
}
}));
app.set('views', path.join(__dirname, 'views'));
index.js
class myClass{
Name = '';
Stats = [];
constructor(name){
this.Name = name;
}
}
router.get('/', function(req,res,next){
let tmp = new myClass('Dan');
let i;
for(i = 0; i < 4; i++){
tmp.Stats.push('day',1,2,3);
}
console.log(tmp.Stats);
// res.send(tmp);
res.render('index', { title: 'Test Data', data: tmp });
});
结果如上所述,console.log 和 res.send 都尊重数组结构,但 render 将其剥离为字符串..?
幸运的是,数组是固定大小的,所以我可以在一个块中重建它,但我宁愿知道我做错了什么导致问题摆在首位..
谢谢。
解决方案
使用上面的代码,您不是在创建一个数组数组,实际上您是在创建一个包含 16 个元素的平面数组。如果您想在每次迭代时推送一个数组,您需要执行以下操作:
for (i = 0; i < 4; i++) {
tmp.Stats.push(['day', 1, 2, 3]);
}
在您的模板中,您可以访问数据并执行以下操作:
<% for(let currStat of data.Stats) { %>
<ul>
<% for(let entry of currStat) { %>
<li>
<%= entry %>
</li>
<% } %>
</ul>
<% } %>
推荐阅读
- javascript - 如何指定命令的选项?
- c++ - 传递可变数量的不同参数并在 C++ 中调用函数
- visual-studio-code - 如何防止 VSCode 要求我保存未保存的文件?
- python - 用 Python 下载 xlsx 文件
- javascript - 如何在一天的开始和一天结束时进入 .toDate() 对象?
- javascript - 如何在没有 jQuery 的情况下单击按钮打开 iframe
- android-jetpack-compose - 切换和取消切换 DropdownMenu 的外观
- html - css:在移动视图中将列显示为行
- python - Pydantic - 验证不会发生
- javascript - 输入“承诺”
' 必须有一个返回异步迭代器的 '[Symbol.asyncIterator]()' 方法