0

次のコードを検討してください

<fx:Script source="Script.as" />
......................
<s:Group>
    <s:layout>
        <s:HorizontalLayout/>
    </s:layout>
    <s:Spacer width="10" />
    <s:Button label="1" click="doSomething()"/>
    <s:Button label="2" click="holder.getCanvas().testDraw()"/>
    <s:Button label="3" click="doSomething()"/>
</s:Group>
<s:Scroller id="canvasGroup" width="650" height="500">
    <s:Group>
        <local:CanvasHolder id="canvas" />
    </s:Group>
</s:Scroller>

ボタンを別のモジュールに移動したい(と呼びましょうToolbar.mxml)。したがって、移動する必要があります<fx:Script source="Script.as" />Script.asキャンバスも使用しています)。ここに私の質問があります:

  1. canvasvarを表示するにはどうすればよいToolbar.mxmlですか (また、表示できますか)?
  2. <fx:Script source="Script.as" />から見えるようになんとかpuできますかToolbar.mxml
4

2 に答える 2

2
  1. canvasで自動的に「見る」ことはできませんToolbar.mxml。Flex のイベント アーキテクチャを使用してアクセスすることをお勧めします。

    //Extend Event class to hold any data that must be passed
    //from Toolbar -> canvas
    public class CustomEvent extends Event
    {
        public static const CUSTOM_EVENT:String = "CustomEventTypeString";
        public var mImportantInfo:String = "";
    
        public function CustomEvent();
        {
            super(CUSTOM_EVENT);
        }
    
        override public function clone():Event
        {
            var evt:CustomEvent = new CustomEvent();
            evt.mImportantInfo = mImportantInfo;
            return evt;
        }
    }
    
    //in Script.as
    myToolbarID.addEventListener(CustomEvent.CUSTOM_EVENT,customEventHandler);
    ...
    protected function customEventHandler(var evt:CustomEvent)
    {
        canvas.myFunction(evt.mImportantInfo);
    }
    
    //in Toolbar.mxml
    var evt:CustomEvent = new CustomEvent();
    evt.mImportantInfo = "canvas needs me!";
    dispatchEvent(evt);
    

    または、キャンバス オブジェクトをツールバーに直接渡すこともできます。

    <local:Toolbar ... myCanvas="{canvas}" ... />
    
    //in Toolbar.mxml
    public var myCanvas:CanvasHolder;
    ...
    myCanvas.myFunction(...);
    

    はい、2 番目のオプションの方がはるかに簡単ですが、1 番目のオプションは、対話する必要があるコンポーネントが互いに簡単に受け渡せない場合に役立ちます。

  2. <fx:Script source="Script.as" /> 必要に 応じてを入れることができToolbar.mxmlます。親のスコープで関数を呼び出す必要がある場合は、ある種のparent...orApplication.application...呼び出しではなく、イベント アーキテクチャを再度使用することをお勧めします。

于 2012-04-26T16:04:23.587 に答える
1

何をしているかを理解する最善の方法は、-keepオプションを付けてコンパイルすることです。これにより、MXML テンプレートからコンパイルされた実際の AS3 コードが生成されます。

<Script source="script.as"/>を使用するのは良いアプローチではないとしましょう- これはinclude "script.as"AS3 で行うのと同じです - IDE はそれを好まず、一般的には散らかっています。「分離コード」が必要な場合は、最初に AS3 で記述してから、AS3 クラスを MXML で拡張します。

理解しておくべきもう 1 つの重要な点は、MXML テンプレートで属性を使用するたびに、属性idの値である名前を持つパブリック プロパティを持つクラスが生成されるということidです。そのため、そのプロパティを宣言したクラス (または MXML テンプレート) の外にコードの一部を移動すると、AS3 クラスの場合とまったく同じ方法で移動できますobjectWithTheProperty.property

于 2012-04-26T19:22:10.587 に答える