Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Очередность применения шаблонов для элемента при указании block('*').elem('*') #508

Closed
vill opened this issue Mar 12, 2018 · 4 comments
Assignees

Comments

@vill
Copy link

vill commented Mar 12, 2018

Всем привет. Почему если в списке шаблонов для элемента есть шаблон с указанием имени сущности block('*').elem('*') он или не применяет свой режим или блокирует дальнейший поиск подходящих wildcard шаблонов?

Input code or something about issue background

([
    { block: 'block', elem: 'elem' }
]);
block('block').elem('*').cls()('class2');
block('*').elem('*').cls()('class1');
block('block').elem('elem').cls()('class3');

Expected Behavior

в зависимости что будет приоритетнее block('*').elem('*')

<div class="block__elem class1"></div>

или block('block').elem('*')

<div class="block__elem class2"></div>

Actual Behavior

<div class="block__elem class3"></div>

Possible Solution

если убрать шаблон для block('*').elem('*')

block('block').elem('*').cls()('class2');
// block('*').elem('*').cls()('class1');
block('block').elem('elem').cls()('class3');

работает правильно

<div class="block__elem class2"></div>

Your Environment

Ссылка на пример

@miripiruni miripiruni self-assigned this Mar 12, 2018
@miripiruni
Copy link
Contributor

В документации написано

Шаблон с подпредикатом на * будет приоритетнее, чем шаблон с конкретным именем в подпредикате.

https://github.com/bem/bem-xjst/blob/master/docs/ru/7-runtime.md#Шаблоны-на-любые-сущности

У нас есть бородатый баг про то, как себя ведет block('*') и block('*').elem('*'). Первый применится ко всему (и элементам без блоков и пустым объектам). А второй не применится ни к чему кроме пустых объектов. Это исправлено, но не выпущено, так как это мажорные изменения (хоть и исправление бага, но этим багом уже пользуются как есть). Могу добавить в этот PR твой пример в качестве тесткейса.

@vill
Copy link
Author

vill commented Mar 12, 2018

Про шаблон с подпредикатом на * я знаю, в описании я имел ввиду #256 поэтому и написал или class1 или class2 что будет приоритетнее с этим багом я не знаю, а вопрос был почему он вообще выводит class3 если за block('*').elem('*').cls()('class1'); идет block('block').elem('*').cls()('class2'); а он не применяется?

block('block').elem('*').cls()('class2'); // Если пред. шаблон не применяется почему до этого не доходит очередь?
block('*').elem('*').cls()('class1');     // Если этот шаблон применяется почему тогда на выходе class3?
block('block').elem('elem').cls()('class3');

@miripiruni
Copy link
Contributor

miripiruni commented Mar 12, 2018

@vill это баги.

  1. Подпредикат block('*').elem('*') сейчас глючит и сам ни на что не матчится.

  2. Подпредикат block('block').elem('*') считает что ему необходимо найти элемент с именем * и соответсвенно не применяется (не на что).

Я оба этих случая исправлю и добавлю тесткейсами в #455.

@vill
Copy link
Author

vill commented Mar 12, 2018

Хорошо, понял.

@vill vill closed this as completed Mar 12, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants