我正在尝试将 mustache.js 用作从外部 API 返回的 JSON 数据的模板系统。问题在于 JSON 对象具有以哈希开头的键,我不确定如何处理它们。对象示例(以及完全简化):
{
"items": [
"description": {
"#cdata-section": "Description goes here"
}
]
}
mustache .js:
var template = '{{#items}}' +
'{{#description}}' +
'{{cdata-section}}' +
'{{/description}}' +
'{{/items}}';
显然它无法识别 cdata-section,因为那不是 key 的名称。我不能使用 {{#cdata-section}}
因为哈希符号表示 Mustache.js 中的条件或枚举。我似乎也无法逃避它,{{\#cdata-section}}
什么都不匹配。
有解决办法吗?还是我必须预处理 JSON 对象?
最佳答案
也许更好的解决方案是修改 mustache.js。违规行似乎在 line 106 上用正则表达式
this.otag + "(\\^|\\#)\\s*(.+)\\s*" + this.ctag
匹配开始标记,后跟 ^
或 #
,然后是任意数量的空格,然后是至少一个字符,然后是任意数量的空格。
我不是最擅长正则表达式的,但一个合适的解决方案是在开始标记后面加上一个断言,它不能匹配 {{\^
或 {{\#
:
this.otag + "(?!\\\\)(\\^|\\#)\\s*(.+)\\s*" + this.ctag
四重反斜杠被 javascript 解释为 \\
+ \\
= \\
,然后被正则表达式解释为 \
+ \
= \
。我还没有对此进行测试,但它应该可以工作。
如果它适合您,请考虑在他们的 GitHub repository 上为您的更改打开拉取请求。
编辑: 我错过了一个地方:在 line 152 上,看来您需要添加类似的断言。我将把它作为练习留给读者。
关于javascript - 如何处理键中的哈希,mustache.js?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6830341/