【问题标题】:Handlebars converts array of strings to array of variablesHandlebars 将字符串数组转换为变量数组
【发布时间】:2016-12-23 09:50:02
【问题描述】:

我的问题是,当我将数据发送到车把模板时,它会将我的字符串数组转换为变量数组:

res.render('index', { 
  title: 'Express' ,
  chartT:"title",
  lab:['test','test2','test3'],
  dat:[1,3,5]
});

模板代码:

  <canvas id="myChart" width="400" height="400"></canvas>
    <script>
      var pollOptions = [{{{lab}}}];
      var pollData = [{{{dat}}}];
      createChart("mychart",pollOptions,pollData);
    </script>

而在 pollOptions 我得到了这个问题

var pollOptions = [test,test2,test3];

Uncaught ReferenceError: test is not defined

我不知道为什么模板会转换它们...

提前感谢您的帮助。

【问题讨论】:

    标签: javascript express handlebars.js


    【解决方案1】:

    HandleBars 专用于 HTML 模板(不渲染 JS 变量) 你可以做这样的事情(没有把手):

    var pollOptions = ["{{{lab}}}"];
    var pollData = ["{{{dat}}}"];
    

    【讨论】:

    • 我使用把手进行模板...例如:

      {{title}}

      从服务器传递数据,以便向用户显示,但我还需要提供图表的数据(那里的变量使代码更具可读性)
    • 是的,我知道。导致捕获错误的原因是handlebars 从变量中删除了',这意味着javascript 引擎会将它们视为javascript 变量,而不是您所期望的String
    • 好的,但是解决方案是什么,我可以强制关闭字符串还是应该对服务器进行 ajax 调用(到不同的路由),将数据提供给图表或注册一个助手或者只是摆脱模板引擎并使用一些前端框架或库?上面的解决方案即使使用 html 也不起作用。
    • 不幸的是更新的解决方案不起作用结果是:[“test,test,test”]
    • 我最终创建了一条新路由(/api/getPools)并通过 fetch 获取了数据,感谢您的帮助,我将接受您的解决方案以澄清我无法发送字符串
    【解决方案2】:

    好的,我知道了!

    var rawData = "{{{lab}}}";
    var pollData = rawData.split(",");
    

    现在我可以将它用作字符串数组

    【讨论】:

      猜你喜欢
      • 2018-03-04
      • 2018-07-04
      • 1970-01-01
      • 1970-01-01
      • 2017-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多