2013-08-12 24 views
1

我想在我的JSP portlet中顯示jFreeChart生成的SVG圖片。圖像的大小應該與portlet一樣寬,高度是寬度的固定因子。如何找到portlet的大小

我解決了這個問題,但我不知道是否有更好的方法來完成相同的任務。

我做什麼:

  1. 定義一個invisibel元素渲染

    <div id="<%= myPortletNamespace %>test" style="display: none;"></div> 
    
  2. 定義渲染時觸發了觸發器後找到該portlet是完整的,我的Portlet的寬度設置。在這裏我找到了前面提到的元素,檢查它的大小,調整包含圖形的表的大小並調用資源來獲取圖形。

    Liferay.on('allPortletsReady', 
        function() { 
         AUI().use('node', function(A) { 
          var test = A.one('#<%= myPortletNamespace %>test'); 
          var parent = test.ancestor('.portlet-body');; 
          if (parent != null){ 
           var table_width = parent.get('offsetWidth');; 
           <%= myResize %>(table_width); 
           <%= myGetTableCharts %>(); 
          } 
         }); 
        } 
    ); 
    

的一個問題是觸發似乎火三次這可能會成爲一個性能問題。

有沒有更好的方法來做到這一點?

+0

爲什麼不給100%的寬度?它將被綁定到portlet邊界,並且100%來自或相對於portlet,所以如果portlet被放置在頁面上,根據您選擇的佈局,圖像將佔用100%的寬度,因此圖像將顯示爲portlet的大小 –

+0

我想用寬度來計算圖像的高度。但是在整個頁面的渲染過程中寬度會發生變化。因此,如果我的portlet位於左側,它將在渲染時具有完整空間的100%。但在右列的portlet也呈現後,它會變小, –

回答

0

你可以試試下面的代碼:

AUI().use(
    'node', 
    function(A) { 
     var onResizeFunc = function() { 
      // my code. 
     } 

     A.getWin().on('resize', onResizeFunc); 

     onResizeFunc(); 
    } 
); 

這具有當用戶改變他們的瀏覽器重新計算的好處。有一件事可以解決這個問題,那就是如果渲染文件渲染後的任何時刻渲染髮生變化。

+0

thx您的評論。我會試試這個。 –