2015-08-31 115 views
1

我該怎麼做?

我有一個現有的頁面(由系統自動生成,我沒有任何控制),其中我注入GWT代碼來修改基於某些列加載後頁面的行爲,並增強了功能這一頁。例如,添加我的GWT代碼後,其中一個表格列中的單元格變爲可點擊,當用戶點擊它時,會在彈出式面板中向用戶顯示其他信息。所有這一切工作正常。GWT檢測DOM更改或修改

問題是什麼?

我在其中注入我的代碼的通用頁面具有分頁的表格,每次顯示15行。現在,當我加載/刷新頁面時,我的GWT代碼會在特定列中插入和吸收事件,這些列會向單元添加功能(如上所述)。但是,當用戶使用左右按鈕導航分頁結果時,頁面不會刷新,因爲它是異步調用。新的15行中的特定列現在沒有沉沒事件,因爲GWT代碼不知道頁面已更改。

我想找到一種方法來告訴我的GWT代碼頁面已經改變,它應該吸收事件到新的15行的特定列的單元格,但無法找到任何方法或機制來幫助我捕獲DOM /文檔更改事件。我試過這樣做,但沒有幫助:

new ChangeHandler(){ 

      @Override 
      public void onChange(ChangeEvent event) { 
       Window.alert("Something Changed"); 

      } 

這是可能的我失去了一些非常明顯的東西。發佈這個問題來了解是否有一種簡單的方法可以找出GWT中DOM的變化。沒有運氣搜索過DOM/Document change/mutation /等。

如果有人知道如何檢測DOM中的GWT變化真的很感謝否則會繼續使用本機突變觀察員編寫本機代碼。

+1

分頁按鈕是生成頁面的一部分嗎?你知道那裏有身份證嗎? –

+0

是分頁按鈕是生成的頁面的一部分,只是檢查他們確實有ID。我想我會得到你建議的解決方案。感謝El提供了一個方向。 –

回答

2

你可以嘗試這樣的事情:

首先獲得輸入元素搭配:

InputElement goOn = DOM.getElementById("IdOfGoOnButton").cast(); 
InputElement goBack = DOM.getElementById("IdOfGoBackButton").cast(); 

下一頁添加原生事件處理程序:

Event.addNativePreviewHandler(new Event.NativePreviewHandler() { 
    @Override 
    public void onPreviewNativeEvent(Event.NativePreviewEvent event) { 
    if (event.getTypeInt() == Event.ONCLICK) { 
     if (event.getNativeEvent() 
       .getEventTarget() != null) { 
     Element as = Element.as(event.getNativeEvent() 
            .getEventTarget()); 
     if (as.getTagName() 
       .toLowerCase() 
       .equals("input")) { 
      InputElement clickedElement = as.cast(); 
      if (clickedElement.getId().equals(goOn.getId()) || 
       clickedElement.getId().equals(goBack.getId())) { 
      // one of the paging button is pressed 
      } 
     } 
     } 
    } 
    } 
}); 

希望有所幫助。

+0

感謝一噸埃爾。能夠解決它。事實上,Event類的介紹給了我們新的見解。我意識到Event.addNativePreviewHandler給出了網頁的完整敏感性,我甚至可以知道一個人是否將鼠標移動到頁面上。現在,我只需要在任何地方隨時隨地點擊頁面,並且每當用戶點擊時,我都會再次將事件放到表格中特定列的單元格中,並且它像魔術一樣工作。沉沒發生在點擊事件被處理之前,因此當新頁面加載並且用戶點擊單元時功能被觸發。 –