如何对字段进行分组以获得一个更改值处理程序

How to group fields to get one change value handler

我有一个这样的演示者:

public class ItemPresenter {

public interface Display {
TextBox getFilterItemName();
TextBox getFilterItemAmount();
}

public ItemPresenter() {
addChangeValueHandlers();

private void addChangeValueHandlers() {
this.display.getFilterItemName().addChangeHandler(new ChangeHandler() {
            @Override
            public void onChange(ChangeEvent event) {
                display.reload(getItemList(display.getFilterBaseVersionName()
                        .getText()));
            }
        });
this.display.getFilterItemAmount().addChangeHandler(new ChangeHandler() {
            @Override
            public void onChange(ChangeEvent event) {
                display.reload(getItemList(display.getFilterItemAmount()
                        .getText()));
            }
        });
}
}

如您所见,我有过滤器,过滤器字段上的每个值更改都应调用 reload(...) 方法来获取新数据。

是否可以将过滤器中的字段分组到一个组中,并有可能实现更改处理程序?像这样:

public class ItemPresenter {

public interface Display {
TextBox getFilterItemName();
TextBox getFilterItemAmount();
Filter getFilter();
}

public ItemPresenter() {
addChangeValueHandlers();

private void addChangeValueHandlers() {
this.display.getFilter.addChangeHandler(new ChangeHandler() {
            @Override
            public void onChange(ChangeEvent event) {
                display.reload(getItemList(display.getFilterBaseVersionName()
                        .getText(), display.getFilterItemAmount()
                        .getText()));
            }
        });
}
}

?

我认为您可以通过在 filterItemName 和 filterItemAmount 上注册相同的处理程序来实现或多或少相同的行为:

ChangeHandler handler = new ChangeHandler() {...}
this.display.getFilterItemAmount().addChangeHandler(handler);
this.display.getFilterItemName().addChangeHandler(handler);