Erro flexível no evento personalizado simples quando implementado no ActionScript (mas não no MXML)
-
28-09-2019 - |
Pergunta
Estou tentando aprender a usar eventos personalizados no Flex.
Estou seguindo o tutorial de Oliver Merk encontrado aqui: blog
O evento personalizado funciona se eu o implementar usando MXML no aplicativo principal. Mas, se eu usar o ActionScript, recebo erros 1119: acesso de propriedade possivelmente indefinida Add_Product por meio de uma referência com classe de tipo estático.
Meu evento: no subdiretório de eventos, eu tenho:
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 );
}
}
}
No componente, eu tenho um RadiobutTonGroup
<mx:RadioButtonGroup id="choicesRadioButtonGroup" itemClick="onButtonClick()"/>
private function onButtonClick():void {
var myEventObj:Event = new AddProductEvent("addProduct", "Flex T-shirt");
dispatchEvent(myEventObj);
}
Este é o metadado no componente e a declaração de importação:
<mx:Metadata>
[Event (name="addProduct", type="events.AddProductEvent")]
</mx:Metadata>
import events.AddProductEvent;
No aplicativo principal, eu tenho:
import events.AddProductEvent;
private function onAddProduct( event:AddProductEvent ):void {
mx.controls.Alert.show('Attached data was ' + event.productName);
}
Se eu implementar o componente no aplicativo principal como este:
<visualcomponent:PopWindow addProduct="onAddProduct(event)" />
Então tudo funciona.
Se eu implementar o componente no aplicativo principal no ActionScript como este, recebo um erro:
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);}
}
Recebo o erro na linha AddEventListener. O que estou fazendo errado? Algum conselho?
Obrigada.
-Laxmidi
Solução
Sua classe AddProductevent parece não expor uma sequência estática pública chamada Add_Product, que tem o valor "AddProduct", que é o que parece que você está tentando fazer.