-
Notifications
You must be signed in to change notification settings - Fork 32
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
Add global matcher #121
Comments
Предлагаемый синтаксис: |
Второй вариант: |
Я за второй вариант. По нему можно догадаться, что происходит, не заглядывая в документацию. |
Все-таки решились на это? ;-\ |
Предлагаю в этом месте сделать консистентно с BEMHTML: bh.match(function() {}, function() {}); смотреть в |
Это же нельзя делать консистентно c BEMHTML, у шаблонизаторов разная "механика". У BH нет нигде подобного паттерна. |
@dosyara bh.match(function(ctx) {
return ctx === 'bla';
}, function(ctx) { doSomething(); });` чем-то отличается от bh.beforeEach(function(ctx) {
if (ctx === 'bla') doSomething();
}); ? |
Там не все так просто, не получится смотреть в typeof. Т.е. ты прав, но этот function должен будет отрабатывать в switch-case, а с учетом того, что порядок играет — я не очень себе представляю, как это должно будет работать так, что результат был ожидаемым. Может я перебдел, конечно, но пока кажется, что это просто нереально. Но даже если я не прав в предыдущем — то beforeEach — это последний матчер, afterEach — первый, но
Пара проблем из тех, которые, кмк, не позволяют это сделать. |
@tadatuta @zxqfox все шаблоны перед запуском компилируются примерно в такую конструкцию: function applyMatchers(ctx, json) {
subRes = _m2(ctx, json); // beforeEach
switch (json.block) {
case "button":
switch (json.elem) {
case undefined:
subRes = _m0(ctx, json); // match('button')
}
}
}
subRes = _m1(ctx, json); // afterEach
}; То есть там получается один большой switch, в который нельзя добавить глобальный шаблон. Можно только перед switch или после. Но для разных задач нужен разный порядок исполнения: где-то глобальный шаблон должен применяться до всех остальных, где-то после. Поэтому пришлось сделать явное разделение на beforeEach и afterEach. |
- Added global matcher support: `beforeEach` and `afterEach` (bem/bh#121). - Added `ctx.process` method (bem/bh#135). - Add `i-bem` class to element with `js` (bem/bh#122). - No-base modifier classes supported (bem/bh#132). - `processBemJson` now return standart BEMJSON (bem/bh#96). Changelog bem/bh@ee446ea
- Added global matcher support: `beforeEach` and `afterEach` (bem/bh#121). - Added `ctx.process` method (bem/bh#135). - Add `i-bem` class to element with `js` (bem/bh#122). - No-base modifier classes supported (bem/bh#132). - `processBemJson` now return standart BEMJSON (bem/bh#96). Changelog bem/bh@ee446ea
- Added global matcher support: `beforeEach` and `afterEach` (bem/bh#121). - Added `ctx.process` method (bem/bh#135). - Add `i-bem` class to element with `js` (bem/bh#122). - No-base modifier classes supported (bem/bh#132). - `processBemJson` now return standart BEMJSON (bem/bh#96). Changelog bem/bh@ee446ea
- Added global matcher support: `beforeEach` and `afterEach` (bem/bh#121). - Added `ctx.process` method (bem/bh#135). - Add `i-bem` class to element with `js` (bem/bh#122). - No-base modifier classes supported (bem/bh#132). - `processBemJson` now return standart BEMJSON (bem/bh#96). Changelog bem/bh@ee446ea
А можно дополнить README с описанием и примером применения этой фичи? @zxqfox |
@gruzzilkin Есть предложение что написать в ридми? ;) |
@zxqfox Например, что данные методы можно использовать для преобразования входящего JSON в BEMJSON и последующим применением шаблонов bh. Т.е. по сути с помощью |
Про это даже есть issue: #142 |
For extension purposes of BH-core functionality it wood be good to have API to set global matcher. This matcher must be executed on each BEMJSON-node to make necessary modifications.
As I understand, it's possible to want to execute some code before and after other user matchers. So, probably, we need
beforeEach
andafterEach
kind of matchers.The text was updated successfully, but these errors were encountered: