EN
kompolom
#kompolom
7 августа 2017

А смысл? в data-bem тоже json и все работает без одинарных кавычек

tadatuta
#tadatuta
7 августа 2017

@trebushuk можно конкретный пример, из каких данных на входе, что именно хочется получить?

belozer
#belozer
8 августа 2017

@tadatuta :+1:

veged
#veged
11 августа 2017

если я правильно понял вопрос, то прямо сейчас можно использовать только двойные кавычки https://github.com/bem/bem-xjst/blob/a2c71800c6474c79dc9fcb691fd7a959b9a7eb66/lib/bemhtml/index.js#L176 или вообще без кавычек для простых значений https://github.com/bem/bem-xjst/blob/master/docs/en/3-api.md#unquoted-attributes

trebushuk
#trebushuk
15 августа 2017

Все дело в том что BEMHTML шаблонизатор используется для генирации фаблонов для CMS

module.exports = {
    block: 'quest-select',
    elem: 'button',
    attrs: { 'data-quest': '[[+class]]' },
    js: {
        merchant: "[[+data]]"
    },
    content: [
       ...
    ]
}
------
<div class="quest-select__button i-bem"
        data-bem='{"quest-select__button":{"merchant":"[[+data]]"}}'
        data-quest="[[+class]]">...</div>

В плейсхолдер [[+data]] соответственно приходит json.
Пробовал пробовал соответственно передавать через attrs и через js везде был конфликт кавычек, отчаявшись написал сюда, но в итоге решил экранированием json на стороне CMS через addslashes.
Всем ответившим спасибо @kompolom, @tadatuta, @belozer, @veged

zxqfox
#zxqfox
15 августа 2017

но в итоге решил экранированием json на стороне CMS через addslashes.

~имхо, это единственно правильный вариант~
а нет, это вполне нормальный вариант

attrs и data-json Возможно ли заставить режим attrs сгенерировать одиночные кавычки для вставки json

имхо, можно делать постпроцессинг поcле такой генерации типа BEMHTML.apply({...}).replace(/:"\[\[+data\]\]"/g, ':[[+data]]'), если гарантировано, что +data будет заменена на валидный JSON.

Либо BEMHTML.apply({...}).replace(/="\[\[+class\]\]"/g, '=\'[[+class]]\''), если точно знаешь, что это отдельный , что +data будет заменена на валидный JSON.

Главное помнить, что в случае с data-bem='{"quest-select__button":{"merchant":"[[+data]]"}}' — нельзя сделать "merchant":'[[+data]]', потому что снаружи кавычки одиночные