К сожалению не разбирал крайний i-bem, может он уже "умеет".
redux - такая штука которая работает с иммутабельным состоянием. В БЭМ модификтор - это состояние, а т.к. в большенстве своем это css, то и состояние модификатора не меняется.
А что если сделать timline как у redux для управления состояниями блоков aka модификаторами? А там и тему с состояниями развить до того, что заполнение данных в форму блока это тоже изменение состояния блока...
WAT? o_0
Т.к. redux не далеко ушел от flux, то вот https://github.com/bem-contrib/bem-flux/
Можешь написать YM модуль в котором создаешь
store
, потом просто подключаешь его в любой БЭМ блок, вызываешьdispatch
на любое действие, в другом блоке можешь сделатьsubscribe
. Проблема использованияredux
сi-bem
в том, что на изменения состояния надо реагировать самостоятельно. Так же ты можешь дополнить BEMDOM своими методами, или вызывать определенный метод у БЭМ блока, render например, когда происходит изменение состояния, чтобы блок мог как то на это реагировать. Или если рассматривать состояние блока как набор его модификаторов, то это очень ограниченное применение, и думаю redux здесь будет лишний, в том жеreact
состояние это полный набор данных компонента, включая его модификаторы.Redux наиболее эффективен в местах где очень часто требуется обновлять
view
часть, как в react, angular, vue, mithril и тд, даже в игровых движках. У всех их есть некое понятие виртуального дерева, благодаря которому они могут точечно обновлять кусочки страницы наиболее эффективным способом.i-bem
тоже можно научить этому подключив одну из вышеуказанных библиотек, но тогда выводы напрашиваются сами собой.@JiLiZART я тебя немного расстрою) чтобы научить
i-bem
этому придется переписать его на 80%. Во-первых, он оперирует с живым домом, а во-вторых, большиство методов, реализованных именно для работы с блоками просто не нужны по причине принципиально другого способа взаимодействия с компонентами.i-bem
предполагает постоянное знание о блоках с которыми ты работаешь, весь контроль лежит на плечах разработчика. При работе сredux
и виртуальным деревом все не так.@pavelpower я работаю над имплементацией
bemjson
в качествеstate
приложения. Не совсем верно мыслить модификатор какstate
. Потому что бэм-состояние это именноbemjson
. Аredux
работает с простым объектом. То есть задача такова: необходимо работать над изменениемbemjson
, чтобы интерфейс перестраивался, используя бэм-шаблоны,bemhtml
в частности https://github.com/awinogradov/bem-xjst/pull/1. То что ты имеешь ввиду реализовано вredux-tools
и кода там совсем чуть-чуть, там просто подписка наstore
и вывод в панель текущего состояния из него. В общем я могу подробнее все рассказать:)@awinogradov круто! Собственно идея с оперированием bemjson, согалсен, самое верное направление. Я так понимаю сложность оперирования пока в структуре bemjson?
@pavelpower в общем сложность пока только во времени) А в целом нет проблем никаких. Подписываться на поддеревья из
bemjson
можно худо бедно заюзав https://github.com/reactjs/reselect и https://github.com/dfilatov/jspath ;)