2011-11-09 7 views
0

私はFlex 4.5で新しく、次のコードを含むクラス(Project.as)を作成しました:Flex 4.5で「未定義オブジェクトのアクセス」エラーが発生する理由を把握できません

main.mxmlファイルで
package classes 
{ 
    public class Project 
    { 
     public var projectName:String; 
     public var description:String; 
     public var fileLoc:String; 

     public function Project() 
     { 
      // This is the constructor 
     } 

     public function SayHello() { 
      import mx.controls.Alert; 
      Alert.show('howdy!','Greeting'); 
     } 
    } 
} 

、私は次のコードを持っている:

<fx:Script> 
    <![CDATA[ 
     import classes.Project;    
     import mx.controls.Alert; 

     public var aProject:Project = new Project; 
     aProject.SayHello(); 
    ]]> 
</fx:Script> 

とFlex Builderは、この言っている:

1120:未定義のプロパティのアクセスをaProject。

どうして私にこのことを伝えていますか?それをどうやって修正できますか?なぜそれが動作していないのか分かりません。

+1

あなたはcreationCompleteで呼び出すinit()関数でコードを実行する必要があります – chchrist

+0

ありがとうございます!私は何かが明らかでないことを知っていた! – Titus

答えて

1

多くの問題があります。

まず、メソッドの中にimportステートメントを置く人はいなかった。通常、それらはパッケージとクラス定義の間に置かれます。

package classes 
{ 
    import mx.controls.Alert; 

    public class Project 
    { 
     public var projectName:String; 
     public var description:String; 
     public var fileLoc:String; 

     public function Project() 
     { 
      // This is the constructor 
     } 

     public function SayHello() { 
      Alert.show('howdy!','Greeting'); 
     } 
    } 
} 

第2;あなたのクラスインスタンスのメソッドを呼び出すために書くActionScriptコードの行は、メソッド内に置く必要があります。 「ランダム」ではありません。このように:

<fx:Script> 
    <![CDATA[ 
     import classes.Project;    
     import mx.controls.Alert; 

     public var aProject:Project = new Project; 
     protected function sayHello():void{ 
      aProject.SayHello(); 
     } 
    ]]> 
</fx:Script> 

このメソッドを呼び出すこともできます。元の投稿のコメント作成者が、creationCompleteを使って提案しました。これはうまくいくでしょう。ただし、MXMLコンポーネント内の「コンストラクタスタイル」コードに対してcreationCompleteを使用する場合は注意が必要です。 preinitializeが優れていて、実際のコンストラクターが実行された直後にイベントが発生します。 MXMLの子にアクセスする必要がある場合は、createChildren()が実行された直後に実行されるinitializeイベントハンドラにコードを記述してください。

creationCompleteハンドラは、コンポーネントの初期化が終了した直後に実行されます。人々はしばしばcreationCompleteで物事を行い、コンポーネントをLifecycleに再度かけて、表示リストを更新します。

関連する問題