2017-02-07 6 views
0

В обычном JavaFX я бы создать привязку на 2 или более наблюдаемых, как это:Как привязываться к более чем 1 ReactFX наблюдаемому?

xxxProperty().bind(Bindings.createObjectBinding(() -> {...}, observable1, observable2, ...)); 

В ReactFx я был показан, что я могу создать привязку, как это:

xxxProperty().bind(val.map(value -> {...})); 

но как создать привязку на 2 или более наблюдаемых ReactFX (Val и/или Var)?

ответ

1

В общем случае, используйте один из них:

static <T> Val<T> create(Supplier<? extends T> computeValue, EventStream<?> invalidations) 
static <T> Val<T> create(Supplier<? extends T> computeValue, Observable... dependencies) 

Для комбинирования 2-6 значений, существуют удобные методы, предлагаемые:

static <A,B,R> Val<R> combine(ObservableValue<A> src1, ObservableValue<B> src2, BiFunction<? super A,? super B,? extends R> f) 
static <A,B,C,R> Val<R> combine(ObservableValue<A> src1, ObservableValue<B> src2, ObservableValue<C> src3, TriFunction<? super A,? super B,? super C,? extends R> f) 
static <A,B,C,D,R> Val<R> combine(ObservableValue<A> src1, ObservableValue<B> src2, ObservableValue<C> src3, ObservableValue<D> src4, TetraFunction<? super A,? super B,? super C,? super D,? extends R> f) 
static <A,B,C,D,E,R> Val<R> combine(ObservableValue<A> src1, ObservableValue<B> src2, ObservableValue<C> src3, ObservableValue<D> src4, ObservableValue<E> src5, PentaFunction<? super A,? super B,? super C,? super D,? super E,? extends R> f) 
static <A,B,C,D,E,F,R> Val<R> combine(ObservableValue<A> src1, ObservableValue<B> src2, ObservableValue<C> src3, ObservableValue<D> src4, ObservableValue<E> src5, ObservableValue<F> src6, HexaFunction<? super A,? super B,? super C,? super D,? super E,? super F,? extends R> f) 

Все эти статические методы на Val.

+0

Очень приятно! Если я хочу что-то подобное для 'Var', я просто сделаю выше, а затем создаю Var из полученного Val? Также позвольте мне поблагодарить вас лично за ReacFX. он, кажется, решает немало проблем для меня. Моя единственная жалоба - отсутствие javadoc или хорошего учебника. Это расширенная библиотека (я бы сказал), чтобы это помогло. – Mark

+0

Зависит от того, что вы подразумеваете под «нечто похожее на« Вар ». Когда вы «сопоставляете» или «комбинируете» значения с несколькими функциями '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' когда вы вызываете 'setValue' на выходе' Var'. Если в вашем случае это _is_ четко определено, используйте ['Val # asVar'] (http://www.reactfx.org/javadoc/2.0-M5/org/reactfx/value/Val.html#asVar-java.util .function.Consumer-) сделать это (т. е. изменить входы, чтобы в результате выход изменился на желаемое значение). –

+0

Или, возможно, вы просто хотите иметь возможность вручную переопределить вычисленное значение. В этом случае просто создайте новый «Var» и обновите его в соответствии с объединенным «Val», а также вручную. Рад, что вам нравится ReactFX. Да, документация - это вечная борьба ... –