如何使用 rxJava 收集表单输入、评估并有条件地转到另一个视图或 post 数据
How do I collect form inputs, evaluate, and conditionally go to another view or post data using rxJava
我有一个带有两个输入设置的表单,带有 rx-binding observables,并且我对 enable/disable 我的提交进行了验证。
我正在努力思考的是表单提交。单击提交时。我需要从表单输入中获取最新的值。然后评估以查看我是否需要更多信息,这会导致回调到视图以转到不同的页面。如果不需要更多信息,那么我需要进行 post 改造。
我不确定获取最新表单值的正确方法(combineLatest、withLatestFrom、zip?)以及如何有条件地回调视图与改造 post,尤其是应该处理的内容直接由运营商,与来自 combineLatest 的组合回调,与订阅回调。
感谢您的帮助。
这是我想到的。它似乎工作。如果您发现任何问题或我可以做得更好的事情,请回复。
private void handleMenuItemClicks() {
mCompositeDisposable.add(view.menuItemClicks().subscribe(menuItem -> {
if (menuItem.getItemId() == R.id.action_submit) {
mCompositeDisposable.add(Observable.combineLatest(
view.nameTextChanges(),
view.msgTextChanges(),
(CharSequence nameTxt, CharSequence msgTxt) -> {
return new CharSequence[] {nameTxt, msgTxt};
}
).filter(values -> {
boolean isParticipant = participant != null && values[0].toString().equals(participant.toString());
if (!isParticipant) {
view.navigateToInfo();
}
return isParticipant;
}).flatMap(values -> myService.createItem(
participant.participantNumber, values[0].toString(), values[1].toString())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()).toObservable()
).subscribe(response -> {
view.showSuccess();
})
);
}
}));
}
我有一个带有两个输入设置的表单,带有 rx-binding observables,并且我对 enable/disable 我的提交进行了验证。
我正在努力思考的是表单提交。单击提交时。我需要从表单输入中获取最新的值。然后评估以查看我是否需要更多信息,这会导致回调到视图以转到不同的页面。如果不需要更多信息,那么我需要进行 post 改造。
我不确定获取最新表单值的正确方法(combineLatest、withLatestFrom、zip?)以及如何有条件地回调视图与改造 post,尤其是应该处理的内容直接由运营商,与来自 combineLatest 的组合回调,与订阅回调。
感谢您的帮助。
这是我想到的。它似乎工作。如果您发现任何问题或我可以做得更好的事情,请回复。
private void handleMenuItemClicks() {
mCompositeDisposable.add(view.menuItemClicks().subscribe(menuItem -> {
if (menuItem.getItemId() == R.id.action_submit) {
mCompositeDisposable.add(Observable.combineLatest(
view.nameTextChanges(),
view.msgTextChanges(),
(CharSequence nameTxt, CharSequence msgTxt) -> {
return new CharSequence[] {nameTxt, msgTxt};
}
).filter(values -> {
boolean isParticipant = participant != null && values[0].toString().equals(participant.toString());
if (!isParticipant) {
view.navigateToInfo();
}
return isParticipant;
}).flatMap(values -> myService.createItem(
participant.participantNumber, values[0].toString(), values[1].toString())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()).toObservable()
).subscribe(response -> {
view.showSuccess();
})
);
}
}));
}