当我尝试使用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类?
答案 0 :(得分:1)
我猜测你导入ConferenceApp_action.as
文件的方式是,包含AlertDataObject
类的classes目录存储在项目的根目录中。如果是这种情况,请尝试将classes文件夹移动到创建main.mxml文件的src目录。默认情况下,这是使用Flex Builder设置项目的主要源文件夹,以及编译器查找自定义类的位置。
请注意,您可以在项目属性对话框中的flex构建路径选项下更改默认源文件夹或指定其他源文件夹,但在您的情况下,我认为您不需要执行其中任何一项。
答案 1 :(得分:1)
我愿意打赌您的ConferenceApp_Action.as文件或main.mxml文件中存在语法错误,导致文件无法完全编译。基本上你正在做的是“包含”而不是使用正确的类,并且当你这样做时你没有得到非常好的错误消息。可能是因为Flex团队忘了他们为人们打开了大门(这不是一个很好的做法)。
IMO,你很幸运,你有任何编译错误。我曾经继承过一个使用这些类型包含的项目,开发人员忘记将一些文件添加到版本控制中。我没有收到错误消息 - 它只是默默无法编译。
我的建议是至少使用Flex团队所考虑的类型的OOP(换句话说是正确的类文件),并获得编译器的全部权重帮助您。如果不这样做,请尝试将指向.as文件的脚本标记移动到另一个脚本标记之上。或者甚至确保所有的import语句都在同一个脚本块中。
FWIW,我相信在Flex Framework的内容中有一些以“$”开头的变量,这个前缀的含义是“这些是我们正在推动的Flash Player定义的原始变量/方法。背景和我们自己的版本覆盖。“我不认为这是你的意图,看着你的代码,但如果是这样,那么以你的方式命名变量是没有错的。
答案 2 :(得分:-1)
您提供的代码中没有任何地方实际实例化AlertDataObject类。因此,编译器不会编译它,并且您在运行时也看不到它。另一个可能导致问题的事情是在使用actionscript时使用PHP编码约定。我不认为我曾尝试使用'$'来启动我的变量名称,但至少它违背了所有良好的actionscript实践,并且最多可能会导致您遇到的奇怪的运行时问题