Size: a a a

2017 June 02

N

NoName in RxPM
Перенес сюда обсуждение, потому что так и не могу понять как осуществить задуманное.
источник

N

NoName in RxPM
@Jeevuz @dmdev Еще раз добрый день, может немного не по теме архитектуры, больше к Rx относится, я все про подход RxPM, у меня есть 3 поля ввода, 2 из них обязательно должны быть заполнены и провалидированы, email и pass, третье поле server может быть пустым. Есть кнопка Login, которая изначально Disabled, её нужно включить если два поля предыдущих были провалидированы. Email валидируется !isEmpty() && regexp. Pass валидруется !isEmpty(). Причем ошибка должна появляться в Поле Email, после того как я убрал фокус, то есть я имею emailFocusConsumer в котором я отслеживаю это событие и делаю disposable.add(
Observable.combineLatest(emailInput,emailFocus,(e,f)-> !isValidEmail(e) && !f).subscribe(this::showEmailError)).И тут вроде все работает. Если я перепрыгнул с поля Email сразу на сервер, пропустив Pass, я должен показать ошибку в Pass, я создаю changePassFocusConsumer, в котором по идее и должен проверять перепрыгнул ли я или нажал на пароль, но событие focus не произойдет здесь ни разу и событие changeText тоже, как мне тогда показать ошибку на Pass. Самостоятель засунуть два вызова focusPassword.call(false), inputPassword.call(""), но тогда ошибка сразу же отобразится на пароле? В общем ломаю голову.
источник

N

NoName in RxPM
Либо делай валидацию и показ ошибки по нажатию на кнопку, либо делай на фокусе на любое поле проверку всех остальных.
источник

N

NoName in RxPM
кнопка изначально выключена и включается только если все ок, такое ТЗ, хоть я с ним и не согласен, но так решили до меня
источник

N

NoName in RxPM
а как делать проверку если ни одно событие вволда не произошло и комбайн не отработает
источник

N

NoName in RxPM
что мне валидировать, если я текст не могу вытащить, потому что не было евента ввода? самому изначально эмулировать ввод вызовом  call("") для всех полей? Но тогда ошибка покажется сразу в пароле, хоть туда мы и не кликали
источник

N

NoName in RxPM
вызвать у всех полей call(""), а валидировать и показывать ошибку тоько после потери фокуса
источник

N

NoName in RxPM
Скорее при фокусе на поле server валидировать поле пароля и показывать ошибку
источник

N

NoName in RxPM
вообще это уже оффтоп и не относится к обсуждению архитектуры
источник

DG

Dmitriy Gorbunov in RxPM
@dmdev Добрый день, смотрел вашу статью и пример RxPM и у меня возникают некоторые вопросы. Самый актуальный на данный момент о состояниях. Вопрос такой - у меня есть EditText в TextInputLayout, если пользователь ввел неверно email я ему показываю ошибку. Как мне сохранять состояния? У меня на одно поле получается три состояния, enable, текст внутри и Error в  Layout, таких элементов на экране 3. Умножаем на 3 получается 9, умножаем на 2 строки одна приват, другая паблик, как в примере, плюс связывание во фрагменте, получается очень многословно даже с котлином. Как быть?
источник

DG

Dmitriy Gorbunov in RxPM
А этот паттерн и не является малословным. Да, получается так. Но давай оценим сколько было бы всего для MVP: интерфейс из трёх методов на поле, три метода реализующих этот интерфейс.  И все это так же умножить на три поля... Короче получится столько же примерно. Но с обработкой сложных связанностей будет проще, чем в MVP, тк не будет разрывов Rx цепочек.

Короче плюсы этого паттерна не в малословности ;)
источник

DG

Dmitriy Gorbunov in RxPM
источник

DG

Dmitriy Gorbunov in RxPM
источник

DG

Dmitriy Gorbunov in RxPM
Это один из вариантов решения множества стейтов для полей ввода (value, enabled, error)
источник

DG

Dmitriy Gorbunov in RxPM
Вместо 6 переменных, получается 2 и bind во вью в одну строчку
источник

N

NoName in RxPM
а что значат два воскличательных?
источник

N

NoName in RxPM
что-то не могу найти в документации
источник

VC

Vasili Chyrvon in RxPM
источник

N

NoName in RxPM
спасибо
источник

N

NoName in RxPM
вы заменили переменную на метод интерфейса?
источник