为什么没有可能从中获得旧值ValueChangeEvent
?从值更改事件中期望同时提供旧值和新值。
是否有任何内置事件类型可以让我通知值更改并包含旧值和新值?有没有简单的方法来实现这样的自定义事件而无需太多努力?
好的,我通过实现要在应用程序中使用的自定义类型来解决它:
public class ValueChange<T> {
private final T oldValue;
private final T newValue;
public ValueChange(T oldValue, T newValue) {
this.oldValue = oldValue;
this.newValue = newValue;
}
public T getOldValue() {
return oldValue;
}
public T getNewValue() {
return newValue;
}
}
现在在我们的事件源(例如自定义控件)中,我们可以这样实现接口:
implements HasValueChangeHandlers<ValueChange<ValueType>>
并且可以通过这种方式从我们的源中触发事件:
private void fireValueChangeEvent(ValueType oldValue, ValueType newValue) {
ValueChangeEvent.fire(this, new ValueChange<ValueType>(oldValue, newValue));
}
所以我们可以在处理程序端访问旧值和新值。无需实现新的事件类型、处理程序类型等。我们可以继续使用ValueChangeEvent
语义上对我们的用例正确的 s。
另一种解决方案:
int oldValue;
@UiHandler("fooListBox")
void onFooListBoxMouseDownEvent(MouseDownEvent event){
oldValue = bisListBox.getSelectedIndex();
}
@UiHandler("fooListBox")
void onFooListBoxChangeEvent(ChangeEvent event){
int newValue = bisListBox.getSelectedIndex();
}