2011-02-24 74 views
2

當發生點擊事件時,我想確定我的哪些小部件已被點擊。請注意,出於性能方面的原因,我特別不希望將點擊處理程序添加到每個小部件。如何獲取包裝給定DOM元素的GWT小部件?

很容易獲得被點擊的元素(它將成爲本機事件的事件目標),但是如何找到相應的小部件?

+0

你有明顯的性能問題:

您可以檢查出我在另一個線程一些工作代碼響應?一旦編譯成JavaScript,GWT點擊事件的速度和「本地」事件之間沒有明顯的差異。 – 2011-02-24 04:55:17

+0

簡答題:沒有。但是對我來說,一個點擊處理程序(在DOM樹中的高級別)會比數千更好。沒有以這種方式利用事件冒泡一件好事? – David 2011-02-24 11:41:06

+1

我沒有看到有通過一組的可能點擊的小部件來遍歷單片點擊處理程序是如何比任何使用瀏覽器的事件調度系統更好。不要給自己額外的工作和脫落使用GWT的包括了單擊處理支持,除非你有一個真正的,測試的問題,爲此,這將是一個解決方案的便利性。 – 2011-02-24 16:38:29

回答

2

它沒有標準的功能,afaik。但是,您可以像GWT的com.google.gwt.user.client.ui.Tree課程中那樣執行此操作。

基本上,它通過首先從您的根部件的元素中收集元素鏈到單擊的部件的元素(請參見Tree類中的私有方法collectElementChain),從而在那裏工作。隨着這條產業鏈要素的窗口小部件被從根小部件到Widget的穿越點擊(見樹類私有方法findItemByChain)找到。

這適用於樹,因爲每個插件/元素比賽的孩子們的小部件和元素指標,因爲它僅允許特定的控件設置爲TreeItem的。

0

實際上,您可以使用gwtqueryDOM.getEventListener(element)方法獲得與窗口小部件的主要元素關聯的窗口小部件,該方法返回與元素關聯的窗口小部件。如果添加單擊處理您的所有部件的GWT - How to retrive real clicked widget?