Size: a a a

2016 May 08

AI

Andrew Illarionov in БЭМ
Vitaly Harisov
@xeniuss можно не делить на платформы, мне, например, для bem.info хватает media query.
а как тогда не грузить часть 1 слайдер display none для родителя по идеи должен помочь не грузить дочерние элементы, но по факту всеравно грузит
источник

VH

Vitaly Harisov in БЭМ
@voischev вопрос именно так, как я процитировал был задан:

«Я не понял что делает required, и как собственно делать валидацию? например если я хочу запретить отправлять какую то строку в форме»
источник

VH

Vitaly Harisov in БЭМ
@xeniuss да, media query предполагают избыточность кода и работу с ним на клиенте. Если избыточность большая или нужно совершенно разное поведение на платформах — нужно server detection и отдавать разный код. Для этого в компонентах и сделан разный код
источник

AI

Andrew Illarionov in БЭМ
Vitaly Harisov
@xeniuss да, media query предполагают избыточность кода и работу с ним на клиенте. Если избыточность большая или нужно совершенно разное поведение на платформах — нужно server detection и отдавать разный код. Для этого в компонентах и сделан разный код
ок, понял, спасибо
источник

IV

Ivan Voischev in БЭМ
@vithar никто не препирался. Перечислил действия которые нужно сделать. Что бы понять как работает
источник

VH

Vitaly Harisov in БЭМ
@voischev ну вот, опять препираешься ;)
источник

IV

Ivan Voischev in БЭМ
Я тоже вообще то до начала топика поднялся ;) медаль мне
источник

VG

Vladimir Grinenko in БЭМ
@versus_stack я покурил немного код bem-forms. суть такая:

1. модификаторы _has-validation потребуются и на form и на form-field одновременно. при этом модификатор на форме нужен только для того, чтобы в цикле обойти все вложенные form-field и вызвать на них валидацию.

2. модификатор required, насколько я могу судить по коду, есть только у form-field. Чтобы объявить какое-либо поле обязательным, достаточно просто установить этот модификатор для form-field. Если при отсутствии значения требуется кастомное сообщение об ошибке (по умолчанию будет «Required field»), то его можно передать через js-параметры блока:
{
   block : 'form-field',
   mods : {
       type : 'input',
       'has-validation' : true,
       required : true
   },
   js: 'Алярма! В это поле нужно что-то ввести!'
   content : [
       {
           block : 'label',
           content : 'Input'
       },
       {
           block : 'input',
           name : 'firstName'
       }
   ]
}

3. Про как запретить какую-то строку.
Нужно повесить на form-field модификатор _validate с каким-либо значением. Например, можно воспользоваться одним из существующих (скажем, https://github.com/bem-contrib/bem-forms/blob/master/common.blocks/form-field/_validate/form-field_validate_email.js), а можно написать свой собственный по аналогии.

Судя по тому, что лежит в репо, ожидается, что сама логика валидации будет вынесена в модификатор блока validation и просто допушиваться в набор валидаторов в модификаторе _validate в блоке form-field. В случае с приведенным выше валидатором имейлов, логика хранится в https://github.com/bem-contrib/bem-forms/blob/master/common.blocks/validation/_email/validation_email.vanilla.js

Надеюсь, ответил на вопрос.
источник

IV

Ivan Voischev in БЭМ
Как я выше писал, лучше смотреть в ветку v1.0.0
источник

VG

Vladimir Grinenko in БЭМ
@voischev тогда давай ее сделаем веткой по умолчанию?
источник

IV

Ivan Voischev in БЭМ
Ok
источник

IV

Ivan Voischev in БЭМ
Она у нас в продакшене в принципе используется. Там должно быть немного по другому все и по проще
источник

VG

Vladimir Grinenko in БЭМ
код там поменялся, но ридми не обновлены :(
источник

IV

Ivan Voischev in БЭМ
вот по этому и версию еще не выпустили)
источник

VG

Vladimir Grinenko in БЭМ
вроде единственное отличие от того, что я выше написал — это то, что модификатор _has-validation больше не нужен — его внесли в код самих блоков
источник

IV

Ivan Voischev in БЭМ
👍
источник

VH

Vitaly Harisov in БЭМ
@voischev вот Владимир молодец, будь как Владимир!
источник

NK

ID:167718357 in БЭМ
Vladimir Grinenko
@versus_stack я покурил немного код bem-forms. суть такая:

1. модификаторы _has-validation потребуются и на form и на form-field одновременно. при этом модификатор на форме нужен только для того, чтобы в цикле обойти все вложенные form-field и вызвать на них валидацию.

2. модификатор required, насколько я могу судить по коду, есть только у form-field. Чтобы объявить какое-либо поле обязательным, достаточно просто установить этот модификатор для form-field. Если при отсутствии значения требуется кастомное сообщение об ошибке (по умолчанию будет «Required field»), то его можно передать через js-параметры блока:
{
   block : 'form-field',
   mods : {
       type : 'input',
       'has-validation' : true,
       required : true
   },
   js: 'Алярма! В это поле нужно что-то ввести!'
   content : [
       {
           block : 'label',
           content : 'Input'
       },
       {
           block : 'input',
           name : 'firstName'
       }
   ]
}

3. Про как запретить какую-то строку.
Нужно повесить на form-field модификатор _validate с каким-либо значением. Например, можно воспользоваться одним из существующих (скажем, https://github.com/bem-contrib/bem-forms/blob/master/common.blocks/form-field/_validate/form-field_validate_email.js), а можно написать свой собственный по аналогии.

Судя по тому, что лежит в репо, ожидается, что сама логика валидации будет вынесена в модификатор блока validation и просто допушиваться в набор валидаторов в модификаторе _validate в блоке form-field. В случае с приведенным выше валидатором имейлов, логика хранится в https://github.com/bem-contrib/bem-forms/blob/master/common.blocks/validation/_email/validation_email.vanilla.js

Надеюсь, ответил на вопрос.
спасибо огромное!
источник
2016 May 09

РИ

Ростислав Ильин in БЭМ
пытаюсь с event'ами разобраться, создал блок button с модом js: clear_form и еще один button с модом load_something, пытаюсь навешать на них события таким образом:

modules.define( 'button', ['i-bem__dom'], function(provide, BEMDOM) {

   provide(BEMDOM.decl( 'button', {
       onSetMod: {

           'js': {
               'clear_form': function() {

                   // bind click
                   this.bindTo('click', function(e) {
                       e.preventDefault();

                       console.log('жмяк clear_form');
                   });
               },
               'load_something': function() {

                   // bind click
                   this.bindTo('click', function(e) {
                       e.preventDefault();

                       console.log('жмяк load_something');
                   });
               }
           }
       }
   }));
});

но это не работает, в чем ошибка, кто-нибудь может подсказать?
источник

VG

Vladimir Grinenko in БЭМ
в приведенном коде речь про подписку на **изменение** модификатора:

onSetMod: {
   имяМодификатора: {
       значениеМодификатор: function() {}
   }
}
источник