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)
| 归档时间: |
|
| 查看次数: |
9155 次 |
| 最近记录: |