在初始化主题时防止订阅中的代码执行
Preventing code in subscribe from executing when subject is initialized
在此代码中:
class RequestNewPasswordFragment {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
btnRequestNewPassword.setOnClickListener {
view.hideKeyboard()
viewModel.validateEmail(txtInputLayoutEmail.textValue)
}
disposables += viewModel.emailValidationSubject
.observeOnMainThread()
.subscribe { validationResponse ->
viewModel.requestNewPassword()
}
}
当片段被初始化时,emailValidationSubject 被初始化。这会导致 subscribe 中的代码执行,从而调用 viewModel 中的 requestNewPassword。我想避免这种情况。我希望仅在单击 btnRequestNewPassword 时调用它。 subscribe 中的代码应该只在 viewModel 需要验证输入时被调用。如何防止 viewModel.requestNewPassword()
在片段初始化时被调用?
我假设你的 emailValidationSubject
是一个基于你之前问题 的 BehaviourSubject。
BehaviourSubject 将始终在订阅时发出一个值,因此您需要提供一个初始值。
it begins by emitting the item most recently emitted by the source Observable (or a seed/default value if none has yet been emitted)
您需要使用 PublishSubject:
PublishSubject emits to an observer only those items that are emitted by the source Observable(s) subsequent to the time of the subscription.
在此代码中:
class RequestNewPasswordFragment {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
btnRequestNewPassword.setOnClickListener {
view.hideKeyboard()
viewModel.validateEmail(txtInputLayoutEmail.textValue)
}
disposables += viewModel.emailValidationSubject
.observeOnMainThread()
.subscribe { validationResponse ->
viewModel.requestNewPassword()
}
}
当片段被初始化时,emailValidationSubject 被初始化。这会导致 subscribe 中的代码执行,从而调用 viewModel 中的 requestNewPassword。我想避免这种情况。我希望仅在单击 btnRequestNewPassword 时调用它。 subscribe 中的代码应该只在 viewModel 需要验证输入时被调用。如何防止 viewModel.requestNewPassword()
在片段初始化时被调用?
我假设你的 emailValidationSubject
是一个基于你之前问题
BehaviourSubject 将始终在订阅时发出一个值,因此您需要提供一个初始值。
it begins by emitting the item most recently emitted by the source Observable (or a seed/default value if none has yet been emitted)
您需要使用 PublishSubject:
PublishSubject emits to an observer only those items that are emitted by the source Observable(s) subsequent to the time of the subscription.