1

Flexbuilder を使用して次の mxml ファイルを実行しようとすると、エラー メッセージが表示されます

1046: タイプが見つからないか、コンパイル時の定数ではありません: AlertDataObject。

このコードは main.mxml ファイルからのものです

<?xml version="1.0" encoding="utf-8"?>
 <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
layout="vertical" 
horizontalAlign="center" 
verticalAlign="middle"
xmlns:components="components.*" 
xmlns:ConferenceRequestForm="components.core.ConferenceRequestForm.*"
xmlns:ConferenceHomeScreen="components.core.ConferenceHomeScreen.*"
xmlns:ConferenceLoginForm="components.core.ConferenceLoginForm.*"
xmlns:debug="components.debug.*"
xmlns:RandomUserMaker="components.debug.RandomUserMaker.*"
xmlns:RandomConferenceMaker="components.debug.RandomConferenceMaker.*"
initialize="initializeApplication();" 
creationComplete="openConferenceHomeScreen();">

<mx:Script>
    <![CDATA[

        import flash.events.MouseEvent;

        public function debugButtonHandler(event:MouseEvent):void{

        userCredentials.logIn('admin', 'admin', "John", "Admin", 7, 99,0)

        openReportsForm(); 

        }

    ]]>
</mx:Script>


<mx:Button label="Debug Button" id="debugButton_btn" click="debugButtonHandler(event);" enabled="true" visible="false"/>

<RandomConferenceMaker:RandomConferenceMaker id="rcm" visible="false"/>
<RandomUserMaker:RandomUserMaker id="rum" visible="false"/>

<mx:Script source="../classes/ConferenceApp_action.as"/> 

</mx:Application>

これはConferenceApp_action.asファイルの先頭で、 AlertDataObjectに失敗しているクラスを定義しているクラスへのインポートを含む、ほとんどのアプリケーション ロジックが含まれています。

//Built-In Classes
import mx.managers.PopUpManager;

//events
import mx.events.CloseEvent;

//custom events
import classes.AlertDataObject;

これは、エラーを作成しているConferenceApp_action.asファイル内の行です。

private function showChoiceWindow(data:AlertDataObject):void{
  .
  .
  .
}

これは AlertDataObject クラスです。

package classes
{

public class AlertDataObject
{

    /****************
    Constants
    ****************/
    static public var TITLE_ALERT:String = "Alert";
    static public var TITLE_CONFIRM:String = "Please Confirm";
    static public var TITLE_DEBUG:String = "Debug";

    static public var TITLE_SUCCESS:String = "Success";
    static public var TITLE_FAILURE:String = "Failure";
    static public var TITLE_ERROR:String = "Error";

    /****************
    Properties
    ****************/
    private var __title:String;
    private var __text:String;

            .
            .

    /****************
    Getters / Setters
    ****************/
    public function get title():String{

        return __title;

    }

            .
            .
            .

    /****************
    Constructor
    ****************/
    public function AlertDataObject($text:String, $title:String="Alert", $yesFunction:Function=null, $yesFunctionArguments:Object=null, $noFunction:Function=null, $noFunctionArguments:Object=null, $dataProvider:Object=null, $icon:Class=null){

        //store basic props
        __title = $title;
        __text = $text;

        //store confirm props
        __yesFunction = $yesFunction;
        __yesFunctionArguments = $yesFunctionArguments;
        __noFunction = $noFunction;
        __noFunctionArguments = $noFunctionArguments;

        //store dataProvider object
        __dataProvider = $dataProvider;

        //store misc. props
        __icon = $icon;

    }

}

}

Flex が AlertDataObject クラスを正しく認識しないのはなぜですか?

4

3 に答える 3

1

ConferenceApp_Action.as ファイルまたは main.mxml ファイルに構文エラーがあり、完全なコンパイルを妨げている可能性があります。基本的に、適切なクラスを使用するのではなく、「インクルード」を行っているため、これを行うと、あまり適切なエラー メッセージが表示されません。おそらく、Flex チームが、人々がこれを行うためにドアを開けたままにしておくことを忘れていたためです (これはあまり良い習慣ではありません)。

IMO、なんらかのコンパイルエラーが発生したのは幸運です。私はかつて、開発者がいくつかのファイルをバージョン管理に追加するのを忘れていた、これらのタイプのインクルードを使用するプロジェクトを継承しました。エラー メッセージ 1 は表示されませんでした。コンパイルに黙って失敗しただけです。

私のアドバイスは、Flex チームが念頭に置いていたタイプの適切な OOP (つまり、適切なクラス ファイル) を少なくとも使用し、コンパイラの全重量を利用することです。それができない場合は、.as ファイルを指すスクリプト タグを他のスクリプト タグの上に移動してみてください。または、すべてのインポート ステートメントが同じスクリプト ブロック内にあることを確認することもできます。

FWIW、Flex Framework の内部には「$」で始まる変数がいくつかあると思います。このプレフィックスの意味は、「これらは Flash Player によって定義された元の変数/メソッドであり、バックグラウンドにプッシュして上書きしています。私たち自身のバージョンで。」コードを見て、それがあなたの意図ではないと思いますが、そうである場合は、変数をそのように名前を付けたままにしても問題はありません。

于 2012-06-19T01:52:23.453 に答える
-1

提供したコードのどこにも、AlertDataObjectクラスを実際にインスタンス化することはありません。そのため、コンパイラはそれをコンパイルせず、実行時に表示されません。問題を引き起こす可能性のあるもう1つのことは、actionscriptを操作するときにPHPコーディング規則を使用することです。変数名を「$」で始めようとしたことはないと思いますが、少なくとも、すべての優れたActionScriptプラクティスに反し、多くても、発生している奇妙なランタイムの問題を引き起こす可能性があります。 。

于 2012-06-18T18:17:53.070 に答える