我想在監聽器添加鼠標SpanElement中,我用創建人:添加監聽器,則SpanElement
SpanElement span = Document.get().createSpanElement();
span.setInnerText("my text");
我在谷歌如何與標籤的包裝做到這一點發現,但我想這樣做沒有任何包裝。可能嗎?
謝謝。
我想在監聽器添加鼠標SpanElement中,我用創建人:添加監聽器,則SpanElement
SpanElement span = Document.get().createSpanElement();
span.setInnerText("my text");
我在谷歌如何與標籤的包裝做到這一點發現,但我想這樣做沒有任何包裝。可能嗎?
謝謝。
也可以沒有JSNI。
因此,與你的元素:
SpanElement span = Document.get().createSpanElement();
span.setInnerText("my text");
直接添加事件偵聽器,元素:
Event.sinkEvents(span, Event.ONCLICK);
Event.setEventListener(span, new EventListener() {
@Override
public void onBrowserEvent(Event event) {
if(Event.ONCLICK == event.getTypeInt()) {
//do your on click action
}
}
});
...它看起來非常難看;) 當你看到 - 事件監聽器這個元素構想的所有dom事件都是「共同的」。因此爲了確保處理正確的事件,您應該檢查事件類型(當您沉沒多個事件類型時(這次是開銷 - 因爲我們只沉沒了CLICK事件的位)。至於沉沒 - >這初始化參與gwt全球dom事件調度系統的元素 - 事件是全局處理的,以減少關閉的次數,以便儘量減少舊IE瀏覽器的內存泄漏。 還有一件事。每個元素只能設置一個事件監聽器 - 如果您設置了新的監聽器,它會覆蓋前一個。所以我假設somwehere以後要鼠標懸停監聽器添加到您的跨度,而不是清償媒體鏈接添加點擊監聽,你可能會做這樣的事情:在一次
//add mouseover event bit to existing sunk event bits
Event.sinkEvents(span, Event.getEventsSunk(span) | Event.ONMOUSEOVER);
final EventListener oldListener = Event.getEventListener(span);
Event.setEventListener(span, new EventListener() {
@Override
public void onBrowserEvent(Event event) {
if(Event.ONMOUSEOVER == event.getTypeInt()) {
//your mouseover action
}
if(oldListener != null) {
oldListener.onBrowserEvent(event);
}
}
});
或添加更多的事件:
//add mouseover event bit to existing sunk event bits
Event.sinkEvents(span, Event.ONCLICK | Event.ONMOUSEOVER | Event.ONMOUSEOUT);
Event.setEventListener(span, new EventListener() {
@Override
public void onBrowserEvent(Event event) {
switch(event.getTypeInt()) {
case Event.ONCLICK:
break;
case Event.ONMOUSEOVER:
break;
case Event.ONMOUSEOUT:
break;
}
}
});
)
Label.wrap(span).addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
//do your on click action
}
});
而且過去的事情,即使你不願意做的不要怕小部件;
所以說,所有你使用一個標籤控件包裹你的跨度大概aprecciate後M編程 - 將它們看作是jquery節點包裝器對象。他們並不沉重,但給了很多權力。 您還可以直接在現有DOM元素上包裝小部件,而不將它們附加到「面板基礎結構」。
非常感謝! – Elijah 2012-04-14 13:05:34
應該做的一點 - 確保在分離時或者在頁面加載時清空事件偵聽器,或者在某些瀏覽器中創建內存泄漏。這就是GWT不鼓勵這種策略的原因。有關更多詳細信息,請參閱http://code.google.com/p/google-web-toolkit/wiki/DomEventsAndMemoryLeaks。 – 2012-04-14 15:34:01
@Colin - 您指的是在使用Widget封裝現有的DOM元素時分離的小部件?對於作爲Label的「標準」小部件,wrap方法通過'RootPanel.detachOnWindowClose(instance);'來關心它,如果你編寫了一個你想在DOM編程中使用的自定義小部件,你應該提供類似於靜態包裝方法使用構造函數「請參閱http://stackoverflow.com/a/10142574/1010868 – 2012-04-14 16:14:53
是的,它可以使用JSNI。你爲什麼不想使用隱藏JSNI複雜性的包裝類? – 2012-04-14 09:34:29
@GuillaumePolet因爲我在其他情況下遇到了這個問題,所以我想知道GWT如何處理低級別的事件。 – Elijah 2012-04-14 13:04:17