2009-12-14 26 views
1

我做了一个实现了接口HasChangeHandlers如何使addValueChangeHandler行为就像addChangeHandler

一包小部件,但我就是不适合的事件给对方。

public HandlerRegistration addChangeHandler(final ChangeHandler handler) { 
    HandlerRegistration registration1 = dateFrom.addValueChangeHandler(handler);// Compile error 

    HandlerRegistration registration2 = dateTo.addValueChangeHandler(new ValueChangeHandler<Date>() { 
     @Override 
     public void onValueChange(ValueChangeEvent<Date> dateValueChangeEvent) { 
       //have to fire handler ?? 
     } 
    }); 

    return null; // what i should return here? 
} 

在此先感谢!

回答

1

您返回要将事件关联到的成员对象的处理程序。比如我有一个文本框+标签控件和我不能从什么地方创建它@UiHandler事件,因为它不是标准所以我所做的就是:

public class TextBoxAndLabel implements HasKeyUpHandlers { 

private TextBox myTextBox; 
private Label myLabel; 


    @Override 
    public HandlerRegistration addKeyUpHandler(KeyUpHandler keyUpHandler) { 
     return myTextBox.addKeyUpHandler(keyUpHandler); 
    } 

} 

,现在我可以实现

@UiHandler("myClassObject") 
1

ChangeHandler不是ValueChangeHandler。您必须创建另一个实现ValueChangeHandler的包装类,并将ChangeHandler作为实例变量。然后,你可以写......

HandlerRegistration registration1 = dateFrom.addValueChangeHandler(new ChangeHandlerWrapper(handler));

哪里ChangeHandlerWrapper是实现ValueChangeHandler类。例如,

class ChangeHandlerWrapper<T> implements ValueChangeHandler<Date> 
{ 
    private ChangeHandler handler; 

    public void onValueChange(ValueChangeEvent<T> changeEvent) { 
     handler.onChange(null); 
    } 
} 

当然,这里假定您不需要处理程序中的实际事件。如果你这样做,事情会变得更加复杂。

+0

OK 。什么应该在onValueChange方法? – 2009-12-15 08:36:47

相关问题