在JavaScript中使用Handlebars对象

时间:2014-10-23 04:28:10

标签: javascript express handlebars.js

我想将整个对象直接传递给javascript,但它似乎无法正常工作。 我尝试了{{{data}}}方法和{{data}}方法,就像其他帖子中推荐的方法一样。 我在把手文件中做了类似的事情:

<script>
  var myData = {{data}}; // or even {{{data}}}
</script>

这两个都给了我异常:Uncaught SyntaxError:Unexpected Identifier。 但是,如果我做了

var myDataUrl = "{{data.url}}";

它工作正常,但对于第一种情况,它打印出&#34; [Object Object&#34;]。关于如何让案例1发挥作用的任何想法?

1 个答案:

答案 0 :(得分:4)

要将Javascript数据直接插入模板,您需要将其转换为合法的javascript字符串并将该字符串传递到模板中。它必须是合法的Javscript才能进入模板。使用类似JSON.stringify()之类的东西是制作合法Javascript的一种方式,但它不是唯一的方法。

这是我的一个把手模板中的一块,它将一些javascript数据结构插入到HTML文件中:

<script>
// temperature data - array of arrays of the form [dateTime, atticTemp, outsideTemp]
var temperatureData = {{{temperatures}}};
// onOffData is an array of [dateTime, str] - where str is "on" or "off"
var onOffData = {{{onOffData}}};
</script>

并且,传递给模板的数据看起来像这样(两个方法调用返回JSON字符串):

app.get('/chart', function(req, res) {
    var tempData = {
        temperatures: data.getTemperatureDataSmallJSON(),
        onOffData: data.getFanOnOffDataSmallJSON(),
        units: req.cookies.temperatureUnits
    };
    res.render('chart', tempData);
});

这会产生一个HTML文件,如下所示:

<script>
// temperature data - array of arrays of the form [dateTime, atticTemp, outsideTemp]
var temperatureData = [[1412752013861,22.19,16.35],[1412753505591,22,16.15],[1412754286561,21.85,15.94]];
// onOffData is an array of [dateTime, str] - where str is "on" or "off"
var onOffData = [[1411786960889,"off"],[1411790853867,"off"]];
</script>

注意,我将数据转换为JSON并将该JSON字符串传递给模板。