bem-xjst
bem-xjst copied to clipboard
block('*') should not apply to elems
Examples: http://goo.gl/SBJszu
More examples: https://goo.gl/lhxXE9
cc @veged @mishanga @st-lukas
I think no. Current behaviour looks like a bug.
In the other hand, this behaviour is quite comfortable for those who want to match to all entities (blocks and elems).
Of course, not! Whenever we need to apply something to every element we can use: block('*').elem('*')
.
Current behaviour is surprising when you expect that similar templates apply only to blocks.
Поведение действительно странное, но его нельзя просто так оторвать, т.к. придется дублировать тело шаблона для block('*')
и block('*').elem('*')
.
Нужен какой-то более универсальный подпредикат, под который будут попадать вообще все узлы bemjson-дерева.
особенно это будет проблемой в https://nda.ya.ru/3RWXFK — нужно придумывать альтернативный способ
+1 за более универсальный подпредикат, он как раз и поможет в случае с https://nda.ya.ru/3RWXFK
Вот еще пример, почему так оставлять не стоит:
https://goo.gl/5ILcm8
Т.е. приоритет для элемента у block('*')
выше, чем у elem('*')
TO ALL: А чем вот так плохо? https://goo.gl/ABfIlj
// Templates
var toAll = function toAll() {
return { who: this.ctx.who };
}
block('*')(
attrs()(toAll),
elem('*').attrs()(toAll)
);
// BEMJSON
{
block: 'a',
who: 'I’m a block',
content: {
elem: 'b',
who: 'I’m an element',
}
}
https://goo.gl/ygm5Tf
Должно ли это работать для {justASimpleObject: true}
?
@zxqfox Nope
Если
Нужен какой-то более универсальный подпредикат, под который будут попадать вообще все узлы bemjson-дерева.
и
Должно ли это работать для
{justASimpleObject: true}
?@zxqfox Nope
то:
any(block('*'), block('*').elem('*')).tag()('span') // как бы мультиплицирует
матчится на все узлы BEMJSON-дерева, но не матчится на {justAnObject: true}
(вроде и не нужно) и хочет введения подпредиката any
(тут вопрос), который решает задачу логического or
для матчеров (либо-либо).
TO ALL: А чем вот так плохо? https://goo.gl/ABfIlj
// Templates
any(
block('*'),
block('*').elem('*')
)(
attrs()(function () {
return { who: this.ctx.who };
})
);
Мне всё-таки кажется, что про эту «подпредикатовую» алгебру стоит как минимум подумать и взвесить минусы и плюсы. Плюсы, кажется, сильно перевешивают.