Как заставить addValueChangeHandler действовать так же, как addChangeHandler - PullRequest
1 голос
/ 14 декабря 2009

Я сделал виджет обтекания, который реализует интерфейс HasChangeHandlers

Но я просто не могу связать события друг с другом.

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?
}

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 08 ноября 2013

Вы возвращаете обработчик объекта-члена, с которым вы хотите связать событие. Например, у меня есть виджет textbox + label, и я не могу создать на нем событие @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 голос
/ 14 декабря 2009

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);
   }
}

Конечно, это предполагает, что вам не нужно фактическое событие в вашем обработчике. Если вы это сделаете, то все станет сложнее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...