0

私は RxJava と ReactFX をより頻繁に使用する予定ですが、ReactFX には RxJava 依存関係がないため、2 つを調整する方法を理解しようとしています。これは特に、ボイラープレートをあまり使わずに JavaFX ObservableValue、RxJava Observable、および ReactFXをブリッジする場合に当てはまりStreamEventます。

RxJava は常に JavaFX アプリケーションをサポートするとは限らないため、コア ビジネス ロジックを RxJava で構成したいと考えています。しかし、JavaFX UIReactFXEventStream. EventStreamだから私の質問は、を にObservable、そしてObservableEventStreamBinding、またはに変える最も効果的な方法は何ObservableValueですか? 全面的に RxJava を使用できることはわかっていますが、ReactFX のプラットフォーム スレッドの安全性と利便性を活用したいと考えています...

//DESIRE 1- Turn EventStream into Observable in the same monad
Observable<Foo> obs = EventStream.valuesOf(fooObservableValue).toObservable();

//Desire 2- Turn Observable into ObservableValue, Eventstream, or Binding
Binding<Foo> obsVal = Observable.create(...).toBinding();
4

2 に答える 2

3

ReactFXEventStreamをRxJava に変換するにはObservable:

Observable<Foo> toRx(EventStream<Foo> es) {
    PublishSubject<Foo> sub = PublishSubject.create();
    es.subscribe(sub::onNext);
    return sub;
}

RxJavaObservableをReactFX に変換するにはEventStream:

EventStream<Foo> fromRx(Observable<Foo> obs) {
    EventSource<Foo> es = new EventSource<>();
    obs.subscribe(foo -> Platform.runLater(() -> es.push(foo)));
    return es;
}

Platform.runLater(...)後者の場合に注意してください。これにより、結果としてEventStreamJavaFXアプリケーションスレッドでイベントが発行されます。

また、どちらの場合も、メソッドSubscriptionから返された s を無視していることに注意してください。subscribeアプリケーションの存続期間にわたってバインディングを確立する場合は、これで問題ありません。一方、それらの間のバインディングが短命である必要がある場合、最初のケースでは、RxJava コンポーネントで を公開しSubject、ReactFX コンポーネントでを公開してから、必要に応じて/をEventStream実行します。2番目のケースも同様です。subscribeunsubscribe

于 2015-05-14T17:23:52.937 に答える