2

为什么没有可能从中获得旧值ValueChangeEvent?从值更改事件中期望同时提供旧值和新值。

是否有任何内置事件类型可以让我通知值更改并包含旧值和新值?有没有简单的方法来实现这样的自定义事件而无需太多努力?

4

2 回答 2

2

好的,我通过实现要在应用程序中使用的自定义类型来解决它:

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。

于 2012-07-12T11:41:57.087 回答
0

另一种解决方案:

int oldValue;

@UiHandler("fooListBox")
void onFooListBoxMouseDownEvent(MouseDownEvent event){
    oldValue = bisListBox.getSelectedIndex();
}

@UiHandler("fooListBox")
void onFooListBoxChangeEvent(ChangeEvent event){
    int newValue = bisListBox.getSelectedIndex();

}
于 2013-06-20T10:40:18.213 回答