首页 > 解决方案 > 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 将其剥离为字符串..?

幸运的是,数组是固定大小的,所以我可以在一个块中重建它,但我宁愿知道我做错了什么导致问题摆在首位..

谢谢。

标签: node.jsarrayshandlebars.js

解决方案


使用上面的代码,您不是在创建一个数组数组,实际上您是在创建一个包含 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>
<% } %>

推荐阅读