【发布时间】:2013-09-08 00:55:23
【问题描述】:
我有一个类 Selector
@Override
public HandlerRegistration addValueChangeHandler(ValueChangeHandler<T> handler) {
return addHandler(handler, ValueChangeEvent.getType());
}
我有一个 Selector 的子类 MessageListBox,它为某些特殊对象的 Selector 添加了一些额外的功能。然后我在我的一个小部件中......
@UiField MessageListBox<Column> filterColumnSelect;
...
@UiHandler("filterColumnSelect")
void handleSelectColumn(ChangeEvent event) {
((Button) add).setEnabled(filterColumnSelect.hasSelection());
}
这行得通,但我想更改方法以实际侦听 ValueChangeEvent,因为在代码中有些地方我生成了一个(虽然我已经找到了如何创建原始 ChangeEvents,但我宁愿不要在这里这样做)。 所以,那我把代码改成……
@UiField MessageListBox<Column> filterColumnSelect;
...
@UiHandler("filterColumnSelect")
void handleSelectColumn(ValueChangeEvent<Column> event) {
((Button) add).setEnabled(filterColumnSelect.hasSelection());
}
但现在 GWT 无法编译: [错误] 字段 'filterColumnSelect' 没有关联的 'addValueChangeHandler' 方法。
嗯...是的,它是从 Selector 继承的,并且所有这些类都是公共的。什么给了?
另外,作为说明,我也查看了 ValueListBox,但我需要它不支持的一些功能,所以没有了。
【问题讨论】:
-
我还在工作中自己替换了
ValueListBox,所以我现在没有代码。但是你能做到filterColumnSelect.addValueChangeHandler()吗?如果可行,您的@UiHandler也应该可以使用。 -
是的,我可以手动添加处理程序,但@UiHandler 无论如何都拒绝工作。
-
预感我认为这可能是 UiBinder 在编译时使用的任何过程(源代码分析或反射,我不知道内部工作原理)可能只是不喜欢超类方法。所以我尝试在只委托给超类的子类上添加一个覆盖方法。现在它起作用了。所以,至少我知道问题出在哪里......奇怪的是,ChangeHandler 在超类上没有问题......:-/
-
很高兴你知道了。我想我从来没有遇到过这个问题。我会记住的