我创建了一个简单的自定义Widget,其中包含一个包含TextBox和Button的HTMLPanel(简而言之)。
由于我不止一次需要这种搜索形式,我想让它变得通用。它到目前为止工作,但我不知道如何使被激活的事件通用。
我的搜索小工具包含:
MyUtils.EVENT_BUS.fireEvent(new SearchEvent(myTextBox.getText()));
我的活动:
public class SearchEvent extends GwtEvent<SearchEventHandler> {
public static Type<SearchEventHandler> TYPE = new Type<SearchEventHandler>();
String toBeSearched;
public SearchEvent(String aSearchString) {
toBeSearched = aSearchString;
}
public String getToBeSearched() {
return toBeSearched;
}
@Override
public com.google.gwt.event.shared.GwtEvent.Type<SearchEventHandler> getAssociatedType() {
return TYPE;
}
@Override
protected void dispatch(SearchEventHandler handler) {
handler.onSearch(this);
}
}
我的EventHandler:
public interface SearchEventHandler extends EventHandler {
void onSearch(SearchEvent aSearchEvent);
}
我的问题是我的Widgets发送了一个特定的事件 - 但是我想为我的Widget的另一个实例发起另一个事件。所以我想通过Widget的Contstructor传递事件(以及我在这里遗漏的其他参数)
public SimpleSearch(GwtEvent anEvent) {}
我将其定义为我的Widget的类成员:
private GwtEvent<EventHandler> myEvent;
但是,当我尝试解雇它时,我遇到了类型问题:
myEvent = new GenericSearchEvent(myTextBox.getText());
MyUtils.EVENT_BUS.fireEvent(myEvent);
The Line
myEvent = new GenericSearchEvent(myTextBox.getText());
不编译,因为Eclipse告诉我:
类型不匹配:无法从SearchEvent转换为GwtEvent
我的问题:如何解决这个问题?
干杯, 添
答案 0 :(得分:0)
问题是为什么要为Widget的不同实例触发不同的SearchEvent
?
如果您只想根据Widget的哪个实例触发事件而有不同的行为,我宁愿将其直接编码到您的SearchEvent
课程中(即添加enum
或引用您的{ {1}} / sender
实例并在widget
回调中处理它:
onSearch
针对您的具体问题:
将窗口小部件中的类成员更改为public class SearchEvent extends GwtEvent<SearchEventHandler> {
public static Type<SearchEventHandler> TYPE = new Type<SearchEventHandler>();
public static enum TYPE {TYPE1,TYPE2}
String toBeSearched;
Widget sender;
TYPE type;
public SearchEvent(String aSearchString,Widget sender,TYPE type) {
toBeSearched = aSearchString;
this.sender = sender;
this.type = type;
}
public String getToBeSearched() {
return toBeSearched;
}
@Override
public com.google.gwt.event.shared.GwtEvent.Type<SearchEventHandler> getAssociatedType() {
return TYPE;
}
@Override
protected void dispatch(SearchEventHandler handler) {
handler.onSearch(this);
}
}
,您将不会遇到编译错误。