在Actionscript中实现时简单自定义事件的Flex错误(但不是在MXML中)

时间:2010-10-05 16:25:09

标签: flex custom-events

我正在尝试学习如何在Flex中使用自定义事件。

我正在关注Oliver Merk的教程:blog

如果我在主应用程序中使用MXML实现自定义事件,则自定义事件有效。但是,如果我使用actionscript,那么我得到错误1119:通过带有静态类型Class的引用访问可能未定义的属性ADD_PRODUCT。

我的活动: 在events子目录中,我得到了:

package events {

   import flash.events.Event;

   public class AddProductEvent extends Event {

      public var productName:String;

      public function AddProductEvent( type:String, productName:String ) {

         super( type );
         this.productName = productName;

      }

      override public function clone():Event {
         return new AddProductEvent( type, productName );
      }

   }
}

在组件中,我有一个radioButtonGroup

<mx:RadioButtonGroup id="choicesRadioButtonGroup" itemClick="onButtonClick()"/>



private function onButtonClick():void {
            var myEventObj:Event = new AddProductEvent("addProduct", "Flex T-shirt");
            dispatchEvent(myEventObj);
        } 

这是组件和import语句中的元数据:

<mx:Metadata>
    [Event (name="addProduct", type="events.AddProductEvent")]
</mx:Metadata>

import events.AddProductEvent;

在主应用程序中,我有:

import events.AddProductEvent;

private function onAddProduct( event:AddProductEvent ):void {
mx.controls.Alert.show('Attached data was ' + event.productName);
}

如果我在主应用程序中实现这样的组件:

<visualcomponent:PopWindow addProduct="onAddProduct(event)" />
然后一切正常。

如果我在动作脚本中的主app中实现组件,那么我会收到错误:

public function clickHandler2(event:MouseEvent):void {

    if(event.currentTarget.selected){popWindow = new PopWindow;
        queryBuilder(event.currentTarget);
        PopUpManager.addPopUp(popWindow, my_view, false);
        PopUpManager.centerPopUp(popWindow);

            popWindow.addEventListener(AddProductEvent.ADD_PRODUCT, onAddProduct);}

    }

我在addEventListener行上收到错误。我究竟做错了什么?有什么建议吗?

谢谢。

-Laxmidi

1 个答案:

答案 0 :(得分:2)

您的AddProductEvent类似乎没有公开名为ADD_PRODUCT的公共静态字符串,该字符串具有值“addProduct”,这就是您尝试执行的操作。