Всем привет.
Метод live выполняется единожды для блока. Собственно, возможно ли описать блок, который инициализируется по запросу только если у него есть определенный модификатор с определенным значением?
Ну и косвенно связанный вопрос - как наилучшим образом описать значение модификатора по умолчанию? Я сейчас решаю такую задачу доопределением моды default, примерно так (прошу воспринимать как псевдокод):
default, this.mods.modeName !== 'modValue': {
applyNext(
this.ctx.mods.modName = 'modValue'
)
}
если хочется именно иметь модификатор, то лучше использовать mix: mix, !this.mods.modeName: [ { mods: { modName: 'modVal' } } ]
про проблему установки модификаторов из bemhtml уже тут писали где-то -- появляется неоднозначность, т.к. могут быть шаблоны на модификаторы и не понятно, как это вычислять (например, если в шаблоне по какому-то модификатору он снимается и ставится другой, как это надо интерпретировать) -- поэтому такой полухак с mix
Да, это понятно, что не могут. Но можно делать примерно так: оживлять блок some-block по инициализации подмешенного блока some-block-initer, который не подмешивать в случае, если у блока some-block есть модификатор init в значении live. Или наоборот, подмешивать, если есть есть модификатор init в значении auto.
возможно, если мы перейдём к более конкретному примеру того, что хочется выразить, то можно будет посоветовать, что-то более определённое
Да, пожалуй, миксовать лучше, спасибо.
Да, в 99.99% случаев, конечно, проще инициализировать. Это рассуждения на случай "а что если мы имеем блок с тяжелой обязательной инициализацией, которую можем отложить в половине вариантов использования, причем эта половина однозначно соответсвует модификатору")
Я не имел в виду, что код конструктора меняется. Все, что меняется от модификатора - возможность отложить выполнение этого кода.
если мы имеем блок с тяжелой обязательной инициализацией, которую можем отложить в половине вариантов использования, причем эта половина однозначно соответсвует модификатору -- то мы можем модифицировать код инициализации и сделать его не таким тяжёлым в случае модификатора
Ммм, да, теперь понятно, что имелось в виду. Можем)