2011-01-08 2 views
10

このチュートリアルhttp://www.brighthub.com/internet/web-development/articles/11010.aspx 私は以下のコードを見つけました。これを壊す方法はありますか?mxmlファイルにはmxmlがあり、スクリプトタグ間のコードはactionscriptファイルに入れられますか?MXMLとアクションスクリプトを分離する

ありがとうございました。

-Nick

<mx:Application 
    xmlns:mx="http://www.adobe.com/2006/mxml" 
    layout="absolute" 
    width="600" 
    height="400" 
    frameRate="100" 
    creationComplete="CreationComplete()" 
    enterFrame="EnterFrame(event)"> 
    <mx:Script><![CDATA[ 
     public function CreationComplete():void 
     { 

     } 

     public function EnterFrame(event:Event):void 
     { 

     } 
    ]]></mx:Script> 
</mx:Application> 

答えて

12

Flexでこれを達成するいくつかの方法があります。

<mx:Script source="yourfile.as" />

あなたはすることができますまた、スクリプトタグ内のw/includes="yourfile.as"宣言を使用します。

<mx:Script 
    <![CDATA[ 
     include "yourfile.as"; 

     //Other functions 
    ]]> 
</mx:Script> 

  • を、あなたのMXMLファイルを拡張するビジュアルコンポーネントを拡張あなたがASファイル内のコードを定義するCode-Behindパターンを使用してください。次に、MXMLファイルが単純にASファイルを拡張し、継承を介してすべてのコードにアクセスできます。

    package { 
        public class MainAppClass { 
         //Your imports here 
         public function CreationComplete():void { 
         } 
         public function EnterFrame(event:Event):void { 
         } 
        } 
    } 
    

    MXMLファイル:

    <component:MainAppClass xmlns:component="your namespace here" 
             xmlns:mx="http://www.adobe.com/2006/mxml" 
             layout="absolute" 
             width="600" 
             height="400" 
             frameRate="100" 
             creationComplete="CreationComplete()" 
             enterFrame="EnterFrame(event)"> 
    </component:MainAppClass> 
    
    ファイルとして

:それは、この(私はこれがApplicationを拡張し、メインMXMLファイルのために働くかどうか分からない)ようになります


  • あなたが探している機能を注入するためにフレームワークを使用するあなたが使用するデータ機能を含む「モデル」の一種として。ワット/注射がMateParsleyあるのに役立ちます頭に浮かぶ

    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
          layout="absolute" 
          width="600" 
          height="400" 
          frameRate="100" 
          creationComplete="model.CreationComplete()" 
          enterFrame="model.EnterFrame(event)"> 
    
          <mx:Script> 
           <![CDATA[ 
            [Inject] 
            [Bindable] 
            public var model:YourModelClass; 
           ]]> 
          </mx:Script> 
        </mx:Application> 
    

2つのフレームワーク:それはパセリでこのような何かに見えるでしょう。コードビハインドパターンは(アプリケーションを拡張する)、メインMXMLファイルで動作するかどうか


は私はわからないので、あなたが問題を抱えている場合、あなたは自分のメインMXMLファイル内のコンテンツを飛び出してみてくださいメインに含まれる別のコンポーネントに変換します。

Main.mxml:

<mx:Application blah,blah,blah> 
    <component:YourComponent /> 
</mx:Application> 

YourComponent.mxml:

<component:YourComponentCodeBehind creationComplete="model.creationComplete()"...> 
    //Whatever MXML content you would have put in the Main file, put in here 
</component:YourComponentCodeBehind> 

YourComponentCodeBehindそれは次のようになります。私は、Flexのアーキテクチャから集めることができました何から

package { 
    class YourComponentCodeBehind { 
     //Whatever AS content you would have put in the Main .as file, put in here 
    } 
} 

として、これはあなたのアプリケーションを設定するのは非常に一般的な方法である:あなたのメインMXMLはへのエントリ・ポイントである単一の「ビュー」を含み、あなたのアプリケーションの残りの部分。このビューには、アプリを構成する他のすべてのビューが含まれます。

希望があります。

+0

私はコードビハインドモデルに行きたいと思います。私はASファイルを構築しようとしました。しかし、実行時にエラーが発生しました。 "TypeError:エラー#2023:Class MainAppClass $がスプライトから継承してルートにリンクする必要があります。" mxmlファイルを作成しようとすると、C:\ as \ MainAppClass.mxml(8)というエラーが発生しました。エラー:をコンポーネントの実装に解決できませんでした。 enterFrame = "EnterFrame(event)"> これを行うには何が欠けていますか? – Nikhil

+0

@Nikhil、良い選択。コードビハインドモデルはかなり安定しており、ディスプレイ関連のコンテンツを処理とデータから分離するのに役立ちます。あなたが見ているエラーについては、主なMXMLファイルと一緒にコードビハインドモデルを使用しようとする問題に基づいていると思います。試してみたいことの編集を投稿します。 – bedwyr

+2

私は、MainAppClassをApplicationに拡張し、MainAppClassをフォルダと同じ名前のパッケージに入れて動作させました。 mxmlクラスの名前を別のものに変更する必要がありました。それ以外の場合は、MainAppClassエラーへのあいまいな参照があります。ご協力いただきありがとうございます。 – Nikhil

関連する問題