2011-02-04 15 views
1

初心者質問: Flex 4でIFrameコンポーネントをFlexで使用しています。以下のコードは、スクロール領域の上部に置くと機能します。しかし、私はそれを可視領域の下に置くとレンダリングされません。私はFlexの初心者です。興味深いのは、HBoxが表示されている間にウィンドウのサイズを変更すると、Iframeが読み込まれることです。しかし、それにスクロールすることはできません。以下は私のコードです。私はすべてが可視であることを確認しました=真実ですが、リスナーを追加する必要があるか、または何らかの理由でそれがレンダリングされるようにウィンドウのサイズが変更されたと思うように思えます。どのようにこれを修正するアイデアを誰もが?ありがとう!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

ちょうどFYIここでのFlexのIFrameではありません経験が、一般的な用語で、あなたは、要素のサイズを再計算するのLayoutManagerを強制するために、今のvalidateを呼び出してコンポーネントのサイズを無効化または表示リストを無効にすることができます

私がここに見ている難しい部分は、それが起こることを正確に思いついていることです(スクロールバーから何らかのイベントをキャプチャしています)。テスト目的のためにあなただけのボタンを作成することができますし、それのクリックハンドラに次の操作を行います

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

これがうまくいく場合はスクロールが発生しているとき、あなたはちょうどあなたに伝えスクローラやキャンバスから適切なイベントを見つける必要があります(最悪の場合、マウスのマークをキャプチャしてから、mouseMoveをキャプチャし、フラグがセットされていれば、コードを実行して無効化/再検証することができます)。基本的にレイアウト/描画の仕組みは、UIComponentに何かのサイズを再計算するか、再描画する必要があるかを知らせるフラグがあるということです。このようにして、必要なコンポーネントだけが常に再描画されるわけではありません。この場合、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

+0

これは完璧に機能しました!ありがとう! – Fostah

+0

@Fotashあなたがあなたの新しいFlexについて言及して以来、私は助けてくれることを嬉しく思っています.AdobeのビデオチュートリアルでFlexをチェックするようアドバイスしたいと思っています。 'のためにちょうどGoogleの周りの素晴らしい紹介される。 – shaunhusain

関連する問題