2012-11-23 38 views
1

我有一個網格從數據庫中填充並工作正常。現在我想爲這個網格添加一個mouseover事件並顯示一個工具提示文本,該文本以突出顯示的記錄以多行方式顯示所有列值。這裏的業務案例是在網格中顯示了不少列,用戶希望在選擇記錄之前快速預覽而不是水平滾動到最後。在這種情況下,擠壓所有這些列以適應屏幕並不是一個乾淨的解決方案。Ext-GWT 3.0網格鼠標事件

我已經試過在網格和GridView的GXT 3.0 API中尋找所有可用的方法,但找不到任何內容以獲取突出顯示的記錄。 MouseMove,MouseDown和MouseClick有一些事件,但MouseOver沒有。

我試過各種論壇以及尋找解決方案,但似乎沒有一個,所以認爲它可能對其他人有用,如果我開始這個線程。

請注意,這個問題與Ext-JS無關。我使用的版本是Ext-GWT 3.0.1。

感謝

回答

1

你可以通過創建一個自定義單元格,並通過該給電網的具體ColumnConfig做到這一點。

使用自定義單元格,您可以訪問所有需要的事件。 一旦你有權訪問你需要的信息,以多種方式顯示它。 GXT爲此提供了很多解決方案。快速提示可能是這裏的方法。

+0

喬納森感謝您的答覆。 – user1847252

+0

創建自定義單元格會給我什麼在突出顯示的單元格中可用,而不是記錄。是否有可能獲取記錄對象本身,這將允許我檢索記錄中的所有列數據?如果是,那麼我可以使用一個自定義單元格,例如ID列,然後從那裏取出 – user1847252

+0

當然可以。當你創建你的單元類時,創建一個構造函數來接受你的視圖(或者更具體地說是你的商店)。然後將此實例存儲到私有最終變量中,然後您可以查詢商店以獲取與當前模型對應的記錄。合理? – Jonathan

2

MouseMove是你想要的。只有當鼠標移動到小部件上時纔會觸發它。

或者,您可以通過使用下沉DOM事件到窗口小部件:

DOM.sinkEvents(widget.getElement(), Event.ONMOUSEOVER); 
在你的widget的 constructoronLoad方法

,然後覆蓋widget的onBrowserEvent:

@Override 
public void onBrowserEvent(Event event){ 
final int eventType = DOM.eventGetType(event); 
    if(eventType == Event.ONMOUSEOVER) { 
     //DISPLAY THE INFO 
    } 
} 

這絕對比直接添加處理程序更難,但是可以自定義。你可以選擇任一個。

順便說一句,你可能想通過使用獲得鼠標的位置:

mouseX = DOM.eventGetClientX(event); 
mouseY = DOM.eventGetClientY(event); 
+0

我有一個單獨的網格類,它實現了IsWidget,並在重載的as​​Widget()實現中返回Grid。我能夠在構造函數中添加sinkEvents,但無法覆蓋onBrowserEvent。網格類只包含構造函數和aswidget方法。另一個問題是,即使我得到它覆蓋,是否有API調用暴露,我可以用來獲取網格中突出顯示的記錄,例如,getHighlightedItem或類似的東西 – user1847252

+0

@ user1847252所以你的意思是你沒有網格類的基類?你應該......但即使你不這樣做,你只需要實現'EventListener'接口。突出顯示記錄很容易設置'normal'和'hover' CSS,或者您可以添加'MouseOver'和'MouseOut'處理程序。不,它不會與其他行爲/處理程序進行交易。 GWT /瀏覽器中的所有事件都會傳播。 – texasbruce