我为express js框架生成handlebars视图,并且我需要访问从单独的JavaScript文件内传递给视图的变量。通过javascript访问handlebar变量
例如:
var foo = {{user.name}}
有人有一个想法?帮手?
非常感谢!
PokeRwOw
我为express js框架生成handlebars视图,并且我需要访问从单独的JavaScript文件内传递给视图的变量。通过javascript访问handlebar变量
例如:
var foo = {{user.name}}
有人有一个想法?帮手?
非常感谢!
PokeRwOw
的user.name
需求的价值是作为一个有效的JavaScript表达式输出,如果你想将其包含在<script>
,将被重新评估它的代码内。
目前,如果user.name
是"john.doe"
例如,生成的脚本将是:
var foo = john.doe; // `john` is treated as an object with a `doe` property
的user.name
至少需要加引号,所以它理解为一个字符串值/文本。
var foo = "{{user.name}}";
// result
var foo = "john.doe";
您也可以利用JSON和JavaScript的语法相似之处,输出JSON是JavaScript可以理解为一种表达,并已经包括引号。
Handlebars.registerHelper('json', function (content) {
return JSON.stringify(content);
});
var foo = {{{json user.name}}};
// result
var foo = "john.doe";
注意在最后一个例子三重{{{...}}}
禁用HTML编码,这样你就不会结了:
var foo = "john.doe"
节点可以将编码的JSON传递给车把 - 视图是这样的:
result.render('index', {
encodedJson : encodeURIComponent(JSON.stringify(jsonData))
});
的车把视图可以解码和解析JSON像这样:
<script>
var decodedJson = decodeURIComponent("{{{encodedJson}}}");
var jsonObj = JSON.parse(decodedJson);
</script>
因为任何传递给车把观点基本被直接注入到HTML ,你应该总是传递编码的json并让视图对它进行解码。
我尝试了使用未编码JSON的其他建议,但他们给了我一个解析错误。看起来像把手将变量解析为纯文本。所以对我来说,它似乎是编码您的JSON最安全的解决方案。
谢谢你的帮助!我没有看到这个方法:var foo =“{{user.name}}”;它帮了我很多:) – PokeRwOw
我有''其中myJson是一个非常大的对象,看起来像把手无法解析它。当我在我的答案中尝试了我建议的解决方案时,我只能得到它的工作 – Drkawashima