Как бороться с хешами в ключах, mustache.js? - PullRequest
4 голосов
/ 26 июля 2011

Я пытаюсь использовать mustache.js как систему шаблонов для данных JSON, которые я получаю от внешнего API.Проблема в том, что у объекта JSON есть ключи, начинающиеся с хэшей, и я не знаю, как с ними обращаться.Пример объекта (и полное упрощение):

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

Mustache.js:

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

Очевидно, он не распознает секцию cdata, поскольку это не имя ключа.Я не могу использовать {{#cdata-section}}, потому что хеш символизирует условные или перечислимые в Mustache.js.Я тоже не могу избежать этого, {{\#cdata-section}} ничего не соответствует.

Есть ли способ обойти это?Или мне нужно предварительно обработать объект JSON?

1 Ответ

1 голос
/ 26 июля 2011

Возможно, лучшим решением было бы изменить mustache.js. Кажущаяся строка находится на строке 106 с регулярным выражением

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

Соответствует открывающему тегу, за которым следуют ^ или #, затем любое количество пробелов, затем хотя бы один символ, затем любое количество пробелов.

Я не лучший в регулярных выражениях, но подходящим решением было бы следовать за открывающим тегом с утверждением, что он не может соответствовать {{\^ или {{\#:

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

Четверные обратные слеши интерпретируются javascript как \\ + \\ = \\, а затем регулярным выражением как \ + \ = \. Я не проверял это, но оно должно работать.

Если это работает для вас, рассмотрите возможность открытия запроса на внесение изменений в их GitHub хранилище

РЕДАКТИРОВАТЬ: Я пропустил место: в строке 152 , кажется, вам нужно добавить аналогичное утверждение. Я оставлю это как упражнение читателю.

...