4

我正在尝试使用 mustache.js 作为从外部 API 返回的 JSON 数据的模板系统。问题是 JSON 对象的键以散列开头,我不知道如何处理它们。对象示例(以及总体简化):

{
    "items": [
        "description": {
            "#cdata-section": "Description goes here"
        }
    ]
}

小胡子.js:

var template = '{{#items}}' +
                    '{{#description}}' +
                         '{{cdata-section}}' +
                    '{{/description}}' +
               '{{/items}}';

显然它不会识别 cdata-section 因为那不是键的名称。我不能使用{{#cdata-section}},因为哈希表示 Mustache.js 中的条件或可枚举。我似乎也无法逃脱它,{{\#cdata-section}}什么都不匹配。

有没有解决的办法?还是我必须预处理 JSON 对象?

4

1 回答 1

1

也许更好的解决方案是修改 mustache.js。使用正则表达式的违规行似乎在第 106 行

this.otag + "(\\^|\\#)\\s*(.+)\\s*" + this.ctag

它与开始标签匹配,后跟一个^or #,然后是任意数量的空格,然后是至少一个字符,然后是任意数量的空格。

我不是最擅长正则表达式,但一个合适的解决方案是在开始标签后面加上一个它不能匹配的断言{{\^{{\#

this.otag + "(?!\\\\)(\\^|\\#)\\s*(.+)\\s*" + this.ctag

四重反斜杠被 javascript 解释为\\+ \\= \\,然后被正则表达式解释为\+ \= \。我没有对此进行测试,但它应该可以工作。

如果它适合您,请考虑在他们的GitHub 存储库中为您的更改打开拉取请求

编辑:我错过了一个地方:在第 152 行,您似乎需要添加一个类似的断言。我将把它作为练习留给读者。

于 2011-07-26T13:10:56.530 回答