2013-03-01 58 views
1

JSF-2.0,鑽嘴魚科2.1.19,PrimeFaces 3.4.1號碼:dataTable中livescroll覆蓋js函數

如從我的分組中可以看出。我正在使用p:dataTable的問題能夠顯示一種狀態/評論模塊。還有一個JS/jQuery函數可以編輯dataTable行的CSS;

jQuery(document).ready(function() { 
    var rowSize = '#{statusBean.size}'; 
    for (var i = 0; i < rowSize; i++) { 
     var rowIndex = i; 
     var inputTextStr = 'dataTableForm' + ':dataTable:' + rowIndex + ':commentInput'; 
     var inputText = $(document.getElementById(inputTextStr)); 
     inputText.css({'box-shadow':'0 0 5px #EB2F28'}); 
    } 
}); 

而且p:dataTable是一個經常與liveScrolling=true,並假設它有且只有具有由上述功能修改CSS p:inputText

問題發生p:dataTable有很多的行。假設用戶向下滾動,表格的live scroll事件被觸發(ajax請求),並且該表格加載更多行,但它會使用常規CSS加載p:inputText組件。函數不能將css應用到最近加載的行中。

所以有需要趕上liveScroll事件或擔保JS功能在p:dataTable

回答

2

有每個更新工作是沒有內置的AJAX事件,可以處理這種情況,所以你必須自己做。我會盡力給你一些建議。

首先重新組織你的JavaScript與此創建功能,並調用該函數加載頁面:現在

function applyMyCSS() { 
    var rowSize = '#{statusBean.size}'; 
    for (var i = 0; i < rowSize; i++) { 
     var rowIndex = i; 
     var inputTextStr = 'dataTableForm' + ':dataTable:' + rowIndex + ':commentInput'; 
     var inputText = $(document.getElementById(inputTextStr)); 
     inputText.css({'box-shadow':'0 0 5px #EB2F28'}); 
    } 
} 

jQuery(document).ready(function() { 
    applyMyCSS(); 
}); 

,你應該以某種方式處理在支撐bean這個AJAX請求。我調查了一下,發現當發生滾動時,會發送名稱爲yourDataTableId_scrolling的特定參數,例如myForm:myTable_scrolling,此參數的值爲true

添加這個地方在您的網頁,最好的地方在最前面:

<f:metadata> 
    <f:event type="preRenderView" listener="#{myBean.onPageLoad('clientIdOfComponent')}"/> 
</f:metadata> 

進行岸把確切的客戶ID從頁面。您可以使用一些實用程序PrimeFaces函數來獲得客戶端ID,例如#{p:component('id')}。此事件將在視圖呈現前和每個請求(AJAX或非AJAX)之前調用您的onPageLoad()函數。在該功能,您將篩選liveScroll事件和處理:

public void onPageLoad(String datatableId) { 
    FacesContext fc = FacesContext.getCurrentInstance(); 
    if (RequestContext.getCurrentInstance().isAjaxRequest() && 
      "true".equals(fc.getExternalContext().getRequestParameterMap().get(datatableId + "_scrolling")) { 

    RequestContext.getCurrentInstance().execute("applyMyCSS()"); 
    } 
} 

請注意,這不是記錄的行爲,可以在未來的版本中改變(但我沒有想到這一點)。我還創建了an issue用於添加此功能,也許它很快就會添加。

+0

非常感謝,我要跟蹤這個問題。再次感謝。 – 2013-03-01 20:06:46

+0

我正在測試這個。它似乎起初運行良好,但是當瀏覽其他頁面並返回到此相關頁面時,如果onPageLoad方法中的條件始終具有false條件,因此在衝浪其他頁面後再次執行applyMyCSS() – 2013-03-01 20:51:24

+0

嘗試調試'onPageLoad'方法,並查看參數映射中'datatableId'和參數的值。也許你只是沒有在方法參數中分配正確的ID。 – partlov 2013-03-01 20:53:38