我一直在試圖讓多個演示者「聽」同一個事件,但我要讓每個事件對演示者都是唯一的。爲多個附加gwt小部件區分事件
Ex。 我在一個不同的選項卡中創建3個複合小部件。他們都綁定在同一個事件上。我們稱之爲「NewPrescriptionEvent」。如果這個事件被解僱,我所有的3個複合材料將嘗試DO這項工作。我只想讓他們中的一個去做。
我發現要做到這一點的唯一方法是通過創建一個臨時事件ID(事件內部的整數)來檢查每個正試圖響應事件的小部件。
代碼片斷
private class OnNewPrescription implements NewPrescriptionHandler {
@Override
public void onNewPrescription(NewPrescriptionEvent event, int dataObjectId) {
if (getDataObject().getPatientId() == dataObjectId) {
...
}
}
}
在結合我做平常:
eventBus.addHandler(NewPrescriptionEvent.TYPE, new OnNewPrescription());
事件:
public class NewPrescriptionEvent extends GwtEvent<NewPrescriptionHandler> {
public static final GwtEvent.Type<NewPrescriptionHandler> TYPE = new GwtEvent.Type<NewPrescriptionHandler>();
private int dataObjectId;
public NewPrescriptionEvent(int dataObjectId) {
this.dataObjectId = dataObjectId;
}
@Override
protected void dispatch(NewPrescriptionHandler handler) {
handler.onNewPrescription(this, dataObjectId);
}
@Override
public GwtEvent.Type<NewPrescriptionHandler> getAssociatedType() {
return TYPE;
}
}
我在想該類型必須是互不相時間,但仍然是同一事件。有沒有人有建議?
Thx。
您正在使用事件系統'安排'客戶端處理?如果您只需要_something_來處理事件,則創建另一個只偵聽觸發處理的事件的小部件。如果您將事件處理程序添加到不應該處理該事件的小部件,則會發生一些奇怪的事情。也許你需要更多的事件類型,或者其他什麼。 – 2010-11-18 16:10:13
如果您要使用相同的事件,並且只希望三個處理程序中的一個實際執行某些操作,則使用與該事件一起傳遞的變量將會起作用。雖然你的示例代碼看起來有些混亂。您是否在尋找解決此問題的其他建議,或者您是否想要幫助修復代碼? – dagge 2010-11-18 16:14:53