自定义ValueChangeHandler GWT

Rob*_*Fox 6 javascript java gwt

我需要写一个自定义ValueChangeHandler并呼出onValueChange(ValueChangeEvent).但是我不明白怎么写ValueChangeEvent.

也许我理解整个GWT事件系统是错误的.有人可以帮忙吗?

编辑:我问如何创建我自己的调度ValueChangeEvent的类.我理解如何倾听它.

ValueChangeEvent的构造函数不可见,我无法创建它.

Hil*_*amp 15

如果你想要开火,ValueChangeEvent你必须HasValueChangeHandlers通过或你的班级或班级的某个地方实现界面.

一个简单的实现是使用EventBus:

EventBus bus = new SimpleEventBus();

@Override
public void fireEvent(GwtEvent<?> event) {
    bus.fireEvent(event);
}

@Override
public HandlerRegistration addValueChangeHandler(ValueChangeHandler<T> handler) {
    return bus.addHandler(ValueChangeEvent.getType(), handler);
}
Run Code Online (Sandbox Code Playgroud)

请注意,您需要替换T您要触发的类型.

因为您无法创建ValueChangeEvent直接调度事件是通过fire方法完成的:

ValueChangeEvent.fire(this, value);
Run Code Online (Sandbox Code Playgroud)

Where this指的是实现的类/字段,HasValueChangeHandlers并且value指的是已更改的值,并且您希望调度该事件.


小智 12

实际上,不是创建一个新的EventBus或HandlerManager,因为你的小部件将是Wiget的子类,它的标准方法是使用Widget.addHandler(handler,eventType)方法.这是一个最小的例子:

    public class MyWidget<T> extends Composite implements HasValueChangeHandlers<T>, HasValue<T> {

    private T value;

    public MyWidget() {
        // Initialize stuff
    }

    @Override
    public HandlerRegistration addValueChangeHandler(final ValueChangeHandler<T> handler) {
        return addHandler(handler, ValueChangeEvent.getType());
    }

    @Override
    public T getValue() {
        return value;
    }

    @Override
    public void setValue(T value) {
        setValue(value, false);
    }

    @Override
    public void setValue(T value, boolean fireEvents) {
        this.value = value;
        if (fireEvents) {
            ValueChangeEvent.fire(this, getValue());
        }
    }
}
Run Code Online (Sandbox Code Playgroud)