我想要一个可以在任何地方使用的加载微调器。所以我创建了一个BoolHandler:
val loadingSpinnerEvents = createBoolHandler()
哪个绑定到加载微调器div:
val loadingSpinner = div(
hidden <-- loadingSpinnerEvents
, Icon.loadingIcon
)
所以我做了以下事情:
def reducer(previousState: State, action: Action): State = {
var st = previousState
loadingSpinnerEvents <-- Observable.create { obs =>
obs.next(false)
st = newState(previousState, action)
Future {
// do the long running work
}.onComplete { _ =>
obs.next(true)
obs.complete()
}
}
st
}
根据println输出,布尔值正确且立即处理。
问题是只有在整个工作完成后才会显示元素更改。
有没有办法强制执行,或者我错过了什么。
答案 0 :(得分:1)
一种解决方案是创建一个以false开头的Observable,然后执行一些工作并转为true。即。
val loadingSpinnerEvents = Observable.create{ obs =>
obs.next(false)
//do some work here
obs.next(true)
}
然而,这取决于正在进行的工作。如果它是同步的,这种方法应该可以很好地工作。
如果您的工作是异步的并且需要回调,您也可以将其包装在Observable中:
val loadingSpinnerEvents = Observable.create{ obs =>
obs.next(false)
// do work with callback
doWork {
obs.next(true)
obs.complete()
}
}