javascript - 如何处理键中的哈希,mustache.js?

标签 javascript json mustache

我正在尝试将 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/

相关文章:

javascript - 如何在像 mustache 这样的无逻辑模板引擎中制作导航栏

javascript - 将 css 模块应用于 AngularJS 的更好方法

javascript - React 中未处理的 Promise 拒绝

javascript - Angular 表单验证以验证电话号码

java - 插入从使用 JDBC 中的 POJO 解析的 JSON 检索的多个记录

json - 使用 JSON 路径跳过双引号

javascript - 如何从客户端清除/设置具有 Ajax Control Toolkit HTML Editor Extender 的 Asp.Net TextBox 的值?

javascript - 如何使用javascript获取json元素

javascript - 在 canjs 中,根据任何模型实例的存在有条件地显示 mustache 模板部分的最惯用的方法是什么?

python - 了解 pystache 中的 lambda