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文件的方式猜测包含AlertDataObject该类的类目录存储在项目的根目录中。如果是这种情况,请尝试将 classes 文件夹移动到创建 main.mxml 文件的 src 目录。默认情况下,这是使用 Flex Builder 进行项目设置的主要源文件夹,也是编译器查找自定义类的位置。

请注意,您可以更改默认源文件夹或在项目属性对话框中的 flex 构建路径选项下指定其他源文件夹,但在您的情况下,我认为您不需要执行其中任何一项。

于 2012-06-18T23:43:50.343 回答
1

我敢打赌,您的 ConferenceApp_Action.as 文件或 main.mxml 文件中存在语法错误,导致无法完全编译。本质上,您所做的是“包含”而不是使用适当的类,并且在执行此操作时不会收到很好的错误消息。可能是因为 Flex 团队忘记了他们为人们做这件事敞开了大门(这不是一个很好的做法)。

IMO,你很幸运,你遇到了任何类型的编译错误。我曾经继承了一个使用这些类型包含的项目,其中开发人员忘记将一些文件添加到版本控制中。我没有收到一条错误消息——它只是默默地编译失败​​。

我的建议是至少使用 Flex 团队考虑的那种类型的 OOP(换句话说,适当的类文件),并让编译器的全部重量帮助你。如果做不到这一点,请尝试将指向 .as 文件的脚本标签移到另一个脚本标签上方。甚至确保所有导入语句都在同一个脚本块中。

FWIW,我相信在 Flex 框架的内部有一些以“$”开头的变量,这个前缀的含义是“这些是我们正在推送到后台并覆盖的 Flash Player 定义的原始变量/方法用我们自己的版本。” 我不认为这是您的意图,查看您的代码,但如果是这样,那么以这种方式命名变量并没有错。

于 2012-06-19T01:52:23.453 回答
-1

在您提供的代码中,您实际上并没有实例化 AlertDataObject 类。因此,编译器不会编译它,并且您在运行时看不到它。可能导致问题的另一件事是在使用 actionscript 时使用 PHP 编码约定。我认为我从未尝试过以“$”开头的变量名,但至少它违背了所有好的动作脚本实践,最多可能会导致您遇到的奇怪的运行时问题.

于 2012-06-18T18:17:53.070 回答