Есть блок который содержит контролы у контролов свой js. Каким образом можно отловить изменение конкретного контрола в другом блоке(я без проблем повешу модификатор если контрол изменился), но уровень абстракции должен быть таким, что конкретный контрол не знает, что он меняет. Своего рода события как в jquery. Собственно как отловить это событие?
Я сделал унаследовав от базового блока и предопределил событие change. Которое передает нужные параметры блоку контролов. Но это не то, что я бы хотел...(сохранилась абстракция для базового блока, но получается будет куча контролов появится куча модифицированных конкретных контролов.)
Не уверен, что правильно понял вопрос. Но в целом задача подписаться на события блоков-потомков решается примерно так: BEMJSON
JS
Есть блок, типо слайдер диапазона, у него своя логика. У него есть метод change который вызывается после изменения слайдера. Этот блок входит в другой блок контролов(фильтр) и вот в блоке контролов мне нужно подписаться на событие изменения блока слайдера диапазона. Сейчас сделал так блок контролов,
Блок слайдера диапазона наследник основного.
На мой взгляд это кривая реализация, хочется из блока контролов подписаться на событие onchange блока 'range-slider'. Мой onchange он естественно кастомный, тупо метод экземпляра блока, могу я на него подписаться?
Документация наше все: this.emit('click'); // создание БЭМ-события "click"
@AndreyGladkov Верно ли понял, что вопрос решился? )
Да вопрос отпал, пока не понял только как мне хранить значения. Пока один такой контрол на странице все ок храню в статике, как только будет несколько контролов буду генерить объект так же в статике.
Или есть более православный способ?
Я не понимаю задачу. Значения чего нужно хранить?
В частном случае у контролов есть значения(к примеру тот же слайдер диапазона выбрал я нужное значение. Об этом значении знает экземпляр блока я храню его в свойстве) Блок контролов - он же фильтр, вешается на событие изменения коллекции этих блоков, и сейчас я юзаю статический метод блока, который возвращает это значение, оно храниться в свойстве this.__self['property']. Недостаток этого решения, что если использовать несколько таких блоков - это свойство будет затерто последним измененным, поэтому я планировал использовать
Т.е каждый экземпляр будет иметь свой модификатор и по модификатору по имени свойства хранить текущее значение. Вопрос: есть более правильный способ хранения данных конкретного экземпляра блока?
Любые данные экземпляра (инстанса) нужно хранить в экзепляре и использовать для их получения методы экземпляра:
@tadatuta Спасибо тебе, еще раз, я много нового узнал о БЭМ событиях)