Open miripiruni opened 8 years ago
Классные изменения! Спасибо. Ждём релиз.
Много раз напарывался что в BEMTREE
не отрабатывал js()(true)
По поводу addJs
раз это фактически extend, чтож не назвать тогда extendJs
(но это уже чисто мое ИМХО)
А так, релиз огонь!
@JiLiZART а в BEMTREE и не должен отрабатывать js()
. Там же всего 2 моды def
и content
.
Ещё replace
Т.е то что фактически выплевывает bemjson не может прописать js:true в исходном дереве? ну или js: {param: 1, param: 2}
@JiLiZART ничего не понял. Кто куда что выплевывает? В каком исходном дереве? Приведи пример, пожалуйста.
Ну банально я пробовал скажем внутри bemtree блока сделать элементу js параметры на основе данных
elem('somename')(
js()(function () { return this.data.someParams }),
content()(function() { return 'somecontent' })
)
По поводу addJs раз это фактически extend, чтож не назвать тогда extendJs (но это уже чисто мое ИМХО)
А мне addJs больше нравится. Меньше букв, лаконично.
@JiLiZART ну все правильно, нету у bemtree js()
он и не вызывается
Настоящим постом хочу продемонстрировать вам как будет выглядет API bem-xjst v8.x. Все пока на стадии RC, поэтому хочу выслушать ваше мнение по поводу всего этого.
Изменения, которые войдут в v8.x
TLDR; Песочница bem-xjst v8.x RC: https://goo.gl/ZeY4xL, в которой можно попробовать все эти вкусности…
Технические подробности
1. Все режимы теперь ведут себя одинаково: переопределяют значение из BEMJSON. (major)
Сейчас значение из шаблона режима
content()
,bem()
,cls()
,tag()
переопределяет значение указанное в BEMJSON. Если вам нужно расширить значение из BEMJSON в шаблоне нужно использоватьapplyNext()
иthis.extend()
/concat()
.Однако режимы
mix()
,js()
,attrs()
сейчас расширяют значение из BEMJSON.Разное поведение режимов вносит некоторый раздрай и постоянно приходится держать в уме кто как себя ведет.
В v8.x мы привели все режимы к одинаковому явному поведению: переопределение значения из BEMJSON. Если вам нужно добавить что-либо, то теперь это можно будет сделать в явном виде — см п.3.
2. Добавлены недостающие режимы:
mods()
иelemMods()
для установки модификаторов. (minor)Под капотом эти режимы просто шорткаты к уже привычным всем конструкциям:
и
Как видно из примеров режимы
mods()
иelemMods()
не имеют своей собственно очереди шаблонов, а добавляют шаблоны в стек к режимуdef()
.По умолчанию
mods()
иelemMods()
возвратят вам значения изthis.mods
иthis.elemMods
соответственно.Пример:
3. Добавлены шорткаты режимов для добавления: addMix(), addAttrs(), addMods(), addElemMods(), addJs().
Так как все режимы теперь переопределяют значение, то чтобы компенсировать необходимость писать
applyNext()
для накапливания результата были введены шорткаты для уже существующих режимовadd*()
.Под капотом
addJs()({ somekey: someval })
этоПод капотом
addMix()({block: 'mixed' })
этоДля остальных режимов аналогично. Как видно из примера шорткаты
add*()
не имеют своего стека шаблонов, а просто добавляют шаблон в стек соответствующего режима.И, естественно, вы можете накапливать результат:
4. Добавлены шорткаты для добавления content: appendContent() и prependContent().
Как вы уже наверное догадались, это тоже шорткаты и они добавляют шаблоны в стек режима
content()
. Пример: