События JS ActiveForm

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
fly2k
Сообщения: 155
Зарегистрирован: 2013.03.19, 05:31

События JS ActiveForm

Сообщение fly2k »

Добрый день!

Помогите плз разобраться.

Пытаюсь сделать обновление slug'а по мере изменения title в реальном времени, то есть в процессе набора. Идеально, получать slug только после того, как прошел(успешно) валидацию title. Предполагая, что именно для этого есть событие afterValidateAttribute, прицепиться я решил к нему. Но, оказалось, что оно срабатывает даже если валидация не прошла. Более того, attr.status в нем равен 3, что означает validating... то есть как будьто валидация еще не завершилась... Более того, значение title почему то предыдущее :(
вот пример:

Код: Выделить всё

    $('form#my-form').on('afterValidateAttribute', function(event, attr, msg) {
        if(attr.name === 'title' && attr.value.length >= 4) {
            alert(attr.value);
        }
    });
если вводить в поле ввода title последовательно 1,2,3,4,5, то после нажатия 4 (title == '1234') - тишина... а после нажатия 5 (title == '12345'') получаем алерт с сообщением '1234' (БЕЗ пятёрки!).

Подскажите плз, что я делаю не так?

Спасибо!
// Yii2Rulez!
fly2k
Сообщения: 155
Зарегистрирован: 2013.03.19, 05:31

Re: События JS ActiveForm

Сообщение fly2k »

Поставил запредельный validationDelay=3333 и если набирать уже за эти 3 секунды несколко символов, то в алерте их всех не будет... алерт как полагается задерживается на 3 сек., но вот значение - с предыдущей валидации... при этом alert($('input#title-id').val()) тут же показывает актуальное значение...

Мне его пока хватит, и я тогда вообще прицеплюсь к обычному oninput. Но блин интересно же: как и для чего использовать beforeAttributeValidate и др?

И еще, раз уж не получается без скриптов, подскажите, каким путем правильнее запилить свою логику валидации и поведения формы(на js), и как это максимально совместить с тем что уже реализовано в Yii2? Ну вот к примеру, я хочу чтобы при работающем validateOnType ошибка показывалась только в случае если набран какой то минимум символов - не очень приятно когда после ввода 1-3 символов в поле вылазит еггог... типа задать еще какие то условия на валидацию - делать её или нет... хотя это тоже своего рода валидация :)

Ну и вообще, можно подумать как повысить юзабельность формы в каждом конкретном случае, и если, как я подозреваю, это делается всё очень коротенько, элегантно как в большинство того что я щупал в Yii, то было бы круто это освоить.

Правильно ли я понимаю, что нада писать js в котором дёргать какие то методы yiiActiveForm.js и вешать это всё на какие то события? На какие лучше: обычные или на которые из ActiveForm? А то я, получается, что не совсем понимаю как события в ActiveForm работают :)

Ну и чет ничего кроме самого ActiveForm.js не видел :( Есть где то мануалы/примеры? А то я конечно сырец то покурил, но в js я не особо разбираюсь, и для меня не всё так вот очевидно по коду.
// Yii2Rulez!
Ответить