错误:不能嵌套类 - >动作

时间:2009-11-23 19:41:04

标签: flex actionscript-3

我写了一个动作脚本fileIncludeMyFile.as:

package CustomComponent
{
    public class IncludeMyFile extends Object
    {

        public function computeSum(a:int, a:int):Number
        {
            return a+b;
        }
    }
}

当我添加包时,我收到错误:包不能嵌套

我的Mxml文件:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
 <mx:Script source="CustomComponent/IncludeMyFile.as"/>  
 <mx:TextInput id="tinput1" width="40" height="40" textAlign="right" 
      x="100" y="100"/>
 <mx:TextInput id="tinput2" width="40" height="40" textAlign="right" 
      x="100" y="100"/>
 <mx:TextArea id="toutput" width="60" height="70" textAlign="right" 
      x="100" y="100"/>

 <mx:Button id="myButton" label="chckSum" 
     click="toutput.text(String(computeSum(Number(tinput1.text),
       Number(tinput2.text)));" x="130" y="140"/>

 <mx:Label text="+" width="40" fontWeight="bold" fontSize="20" x="130" 
      y="140"/>

</mx:Application>

实际上,我将Actionscript文件包含在MXML中。

请让我知道我哪里做错了。

谢谢, 拉维

3 个答案:

答案 0 :(得分:4)

这是造成错误的原因:

<mx:Script source="CustomComponent/IncludeMyFile.as"/>

编译器包含该文件并将其解释为:

<mx:Script>
  <![CDATA[
  package CustomComponent
  {
    public class IncludeMyFile extends Object
    {
        public function computeSum(a:int, a:int):Number
        {
            return a+b;
        }
    }
  }
  ]]>
</mx:Script>

<mx:Script>标记应该直接声明变量和方法。当flex编译mxml文件时,它会生成一个AS文件,其中包含自己的packageclass声明。 mxml文件声明的类的名称是该mxml文件本身的名称。当您的包含文件包含其自己的packageclass声明时,编译器会将其解释为嵌套的包/类声明,从而将其解释为错误。

您不能在通过script标记包含的脚本中声明类 - 您必须单独声明它们。 script标记的source属性是一种在单独的文件中编写相应动作脚本的方法(我个人不喜欢这样做),而不是在应用中包含其他类。使用script标记内的import语句来执行此操作。

要修复错误,请将AS文件内容更改为:

public function computeSum(a:int, a:int):Number
{
    return a+b;
}

现在方法computeSum是mxml文件声明的类的实例方法。

答案 1 :(得分:2)

为未来的googlers添加我对此错误的调​​查结果..

除了上面的答案之外,这个错误可能是由于编译器没有按照您的预期通知的非常小的语法错误造成的。

例如:

public function myFunc(myVar:String=null):void{
  if(myVar==null){
    myVar : String = "Error";
  }
}

请注意,第二个“:String”不是必需的,实际上是触发此编译器错误的语法错误。

此错误消息的其他情况:

  1. 缺少分号
  2. 在mxml params中过度使用内联变量
  3. 双重导入名称空间
  4. 解决这个问题的最佳人选可能是首先编写错误代码的人。就像在干草袋里找针一样。

    祝你好运!

答案 2 :(得分:1)

<mx:Button id="myButton" label="chckSum" click="toutput.text(String(computeSum(Number(tinput1.text), Number(tinput2.text)));" x="130" y="140"/>

表示您正在使用普通的mxml Button组件。

你的函数应该是静态的,好像你似乎不需要创建一个实例来计算总和,你有“a”和“b”作为参数,而不是a和a,另外,我希望你只需要ints,否则如果在其他地方你期望Number值(浮点值),你将对它们进行舍入。

public static function computeSum(a:int, b:int):Number{
   return a+b;
}

您确定要添加所有内容吗?

可能更容易有类似的东西:

<mx:Button id="myButton" label="chckSum" click="toutput.text(String(Number(tinput1.text)+ Number(tinput2.text));" x="130" y="140"/>

这一目了然。它有点脏,我不知道你真正想要做什么。