bem-site / bem-forum-content-ru

Content BEM forum for Russian speak users
MIT License
56 stars 6 forks source link

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

Open trebushchuk opened 7 years ago

trebushchuk commented 7 years ago

Собственно вопрос в заголовке.

kompolom commented 7 years ago

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

tadatuta commented 7 years ago

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

belozer commented 7 years ago

@tadatuta :+1:

veged commented 7 years ago

если я правильно понял вопрос, то прямо сейчас можно использовать только двойные кавычки 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

trebushchuk commented 7 years ago

Все дело в том что 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

qfox commented 7 years ago

но в итоге решил экранированием 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]]', потому что снаружи кавычки одиночные