2011-02-04 45 views
1

初學者問題: 我在Flex 4中使用IFrame Component for Flex。下面的代碼在放置在滾動區域的頂部時起作用。但是,如果我將它放在可見區域下面的位置,它將不會呈現。我是Flex的初學者。有趣的是,當我在查看HBox的同時調整窗口大小時,Iframe會加載。但滾動到它不會。以下是我的代碼。我已經確定一切都可見= true,但似乎我需要添加一個偵聽器或以某種方式欺騙它認爲該窗口已被調整大小以使其呈現。任何人有一個想法如何解決這個問題?謝謝!Flex IFrame組件無法在可視區域外渲染

<mx:HBox visible="true" backgroundColor="#cccccc" id="facebookhbox" width="100%" height="100" horizontalAlign="center" verticalAlign="middle" verticalGap="0" verticalScrollPolicy="off"> 
     <mx:Canvas id="facebookcanvas" visible="true" x="0" y="0" width="650" height="80"> 
      <flexiframe:IFrame visible="true" y="0" x="0" id="facebookIFrame" source="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.examplelink.com&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light&amp;height=80" width="450" height="80"/> 
     </mx:Canvas> 
    </mx:HBox> 

回答

3

沒有與Flex的IFrame體驗這裏只是FYI但在通用術語,你可以無效組件的大小或無效,則顯示列表調用,以迫使LayoutManager的重新計算元件的大小,現在驗證並且它是兒童(或者簡單地在使顯示列表無效的情況下繪製):

我在這裏看到的困難部分是確定您何時想要發生這種情況(即從滾動條捕獲某種事件)。出於測試目的,你可以只創建一個按鈕,並在它的點擊處理程序執行以下操作:

facebookIFrame.invalidateSize(); 
facebookIFrame.invalidateDisplayList(); 
facebookIFrame.validateNow(); 

如果這個作品出來,那麼你只需要找到從滾輪或帆布滾動正在發生的時候,告訴你相應的事件(最壞的情況下,你可以捕獲鼠標標記一個標誌,然後捕獲mouseMove,如果該標誌設置,然後運行代碼無效/重新驗證)。基本上,佈局/圖畫的工作原理是UIComponents有標誌讓它知道什麼時候需要重新計算某個東西的大小或重繪它,這樣一切都不會總是隻重繪那些需要它的組件。在這種情況下,似乎FacebookIFrame在某些時候不會失效。讓我知道我是否可以再幫忙,或者如果這不起作用。

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
       layout="vertical" 
       height="100%" 
       width="100%" 
       xmlns:code="http://code.google.com/p/flex-iframe/" 
       mouseDown="application1_mouseDownHandler(event)" 
       mouseUp="application1_mouseUpHandler(event)" 
       mouseMove="application1_mouseMoveHandler(event)"> 

    <mx:Script> 
     <![CDATA[ 
      var isMouseDown:Boolean; 
      protected function button1_clickHandler(event:MouseEvent):void 
      { 
       // TODO Auto-generated method stub 
       facebookIFrame.invalidateSize(); 
       facebookIFrame.invalidateDisplayList(); 
       facebookIFrame.validateNow(); 
      } 
      protected function application1_mouseDownHandler(event:MouseEvent):void 
      { 
       isMouseDown = true; 
      } 
      protected function application1_mouseUpHandler(event:MouseEvent):void 
      { 
       isMouseDown = false; 
      } 
      protected function application1_mouseMoveHandler(event:MouseEvent):void 
      { 
       if(isMouseDown) 
       { 
        facebookIFrame.invalidateSize(); 
        facebookIFrame.invalidateDisplayList(); 
        facebookIFrame.validateNow(); 
       } 
      } 
     ]]> 
    </mx:Script> 

    <mx:Spacer height="1000"/> 
    <mx:Button label="Test Invalidation" 
       click="button1_clickHandler(event)"/> 
    <mx:HBox visible="true" backgroundColor="#cccccc" id="facebookhbox" width="100%" height="80" horizontalAlign="center" verticalAlign="middle" verticalGap="0" verticalScrollPolicy="off"> 
     <mx:Canvas id="facebookcanvas" visible="true" x="0" y="0" width="650" height="80"> 
      <code:IFrame visible="true" y="0" x="0" id="facebookIFrame" source="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.examplelink.com&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light&amp;height=80" width="450" height="80"/> 
     </mx:Canvas> 
    </mx:HBox> 
</mx:Application> 

更新以包括顯示例如工作一個完整的應用程序,這絕不是一個做事的好方法,這是由於在這應該是固定的,iframe代碼中的錯誤(雖然我不確定錯誤存在的方式或位置應該使它在適當的位置無效)。

Shaun

+0

Shaun,非常感謝您的時間迴應。我現在要嘗試所有這些。 – Fostah 2011-02-04 23:18:47