2009-12-14 3 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

A 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

нормально , и что должно быть в методе onValueChange? –

Смежные вопросы