我需要将把手模板中的一小部分HTML转换为JSON对象的一部分。以下是Handlebars模板的相关部分:
<ul>
{{#each props.items}}
<li>
<a>{{name}}</a>
</li>
{{/each}}
</ul>
我面临的问题是我需要JSON对象中的最终输出是一个字符串数组(最终代码的每一行一个)或一个没有换行符的字符串。相反,我将整个最终块作为单个字符串,但带有换行符 - 这使得JSON无效。
我没有Handlebars模板或JSON,所以我不能改变其中任何一个。
以下是我目前的代码:
var fileContents = Plugins.fs.readFileSync(hbsPath, "utf8");
//Next line is my latest attempt to close each line with quotes,
//inject a newline and start new line with quotes.
//It doesn't work - the newline isn't inserted.
//I've also tried \n\r, \r\n, \r
fileContents = fileContents.replace(/(\r\n|\n|\r)/gm, "\",\n\"");
var template = hbs.compile(fileContents);
var thisProps = {props: props};
return new hbs.SafeString(template(thisProps));
如果我只是将返回的字符串写入控制台,它看起来是正确的,但是当我用它创建JSON文件时,未终止的字符串被标记为无效。
更新:这是JSON进入图片的地方:
{
"code" : [{{renderSnippet "MyPartial" MyModel }}]
}
这是Handlebars处理的文件,{{ }}
内的部分文件被Handlebars中的字符串替换。该字符串是问题 - 它包括使其无效JSON的换行符。我需要使它成为一个没有换行符的单个字符串,或者是一个字符串数组,每行作为一个单独的字符串。
任何指针?
感谢。
答案 0 :(得分:1)
正如我在评论中所说,Handlebars不会创建JSON。 Handlebars是一个针对html的模板引擎,因此它只适用于html或具有相同或类似转义的语言。您需要将{{renderSnippet "MyPartial" MyModel }}
的结果存储在转换为JSON的对象中。
类似的东西:
var renderSnippedTpl = Handlebars.compile('{{renderSnippet "MyPartial" MyModel }}');
var obj = {
code : [renderSnippedTpl({/*required params*/})]
}
console.log( JSON.stringify(obj) );