我正在尝试使用mustache.js作为我从外部API返回的JSON数据的模板系统。问题是JSON对象有以哈希开头的键,我不知道如何处理它们。对象示例(以及完全简化):
{
"items": [
"description": {
"#cdata-section": "Description goes here"
}
]
}
Mustache.js:
var template = '{{#items}}' +
'{{#description}}' +
'{{cdata-section}}' +
'{{/description}}' +
'{{/items}}';
显然它不会识别cdata-section,因为那不是密钥的名称。我不能使用{{#cdata-section}}
,因为哈希表示Mustache.js中的条件或枚举。我似乎无法逃脱它,{{\#cdata-section}}
没有匹配。
有解决方法吗?或者我是否必须预处理JSON对象?
答案 0 :(得分:1)
也许更好的解决方案是修改mustache.js。使用正则表达式
时,违规行似乎在line 106上this.otag + "(\\^|\\#)\\s*(.+)\\s*" + this.ctag
哪个匹配开始标记,后跟^
或#
,然后是任意数量的空格,然后是至少一个字符,然后是任意数量的空格。
我不是最好的正则表达式,但一个合适的解决方案是遵循开头标记,断言它不匹配{{\^
或{{\#
:
this.otag + "(?!\\\\)(\\^|\\#)\\s*(.+)\\s*" + this.ctag
四重反斜杠由javascript解释为\\
+ \\
= \\
,然后由正则表达式\
+ \
= \
解释。我没有测试过这个,但它应该可以工作。
如果它适合您,请考虑在GitHub repository
打开一个拉动请求编辑:我错过了一个地点:在line 152上,您似乎需要添加类似的断言。我将把它作为练习留给读者。