Т.к. все модификаторы блока образуют одну сущность, а выбор метода зависит от текущего модификатора, то можно писать вот такие кейсы.
const CartItem = bem.declBlock('CartItem', {
delete() {
console.log('Soft Delete')
}
});
CartItem.declMod({ modName : 'obsolete' }, {
delete() {
console.log('Full Delete');
}
});
cartItem = new CartItem();
cartItem.delete();
cartItem.setMod('obsolete');
cartItem.delete();
Результат в консоли
→ Soft Delete
→ Full Delete
Но возникает вопрос... На сколько архитектурно корректно использовать эти фичи? И использует ли кто-то их вообще?
Вроде удобно в runtime менять поведение блока в зависимости от модификатора, но с другой стороны не так явно выглядит.
@veged @tadatuta подскажите на сколько корректно использовать такой подход?
я думаю, что я не понимаю вопроса, т.к. приведённый код абсолютно нормальный и я не понимаю, почему может показаться, что он архитектурно не корректный
@veged просто нигде в документации не встречал описания этой возможности. Узнал о ней только, когда потребовалось прошерудить весь i-bem.
Раньше к задекларированным модификаторам относился как к чему-то "статическому", что работает только во время инита. Про фичу с runtime переключением работы методов вообще не знал.
По этой причине и показалось, что я делаю что-то "не честное" и костыльное, хотя и очень удобное для уменьшения кода в основном блоке.
Но теперь я спокоен )
https://ru.bem.info/platform/i-bem/declaration/#%D0%94%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BC%D0%BE%D0%B4%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%82%D0%BE%D1%80%D0%B0
есть вариант, как написать лучше/понятнее?
Github хорошо встроен для комментариев