FileReference не запускает событие SELECT
У меня есть следующий код. Проблема в том, что ни событие SELECT, ни CANCEL никогда не запускались после того, как я выбрал файл в диалоговом окне просмотра.
У меня MacOS 10.6 и FlashPlayer 10.
Что я делаю неправильно?
package
{
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.net.FileReference;
import flash.net.FileFilter;
import flash.net.URLRequest;
public class loader2 extends Sprite
{
private var placeholder:Sprite;
private var fileReference:FileReference;
private var fileFilter:FileFilter;
public function loader2()
{
super();
this.stage.align = StageAlign.TOP_LEFT;
this.stage.scaleMode = StageScaleMode.NO_SCALE;
this.stage.addEventListener(MouseEvent.CLICK, clickHandler);
this.init();
}
protected function init():void
{
this.placeholder = new Sprite();
this.placeholder.graphics.beginFill(0x999999);
this.placeholder.graphics.drawRect(0,0,stage.stageWidth,stage.stageHeight);
this.placeholder.graphics.endFill();
this.placeholder.useHandCursor = true;
this.placeholder.buttonMode = true;
this.addChild(placeholder);
}
protected function getHostName():String
{
var url:String = this.loaderInfo.loaderURL;
var protocolIndex:Number = url.indexOf("://");
var index:Number = url.indexOf("/", protocolIndex + 3);
return url.substr(0, index);
}
protected function getUploadUrl():String
{
var host:String = this.getHostName();
var action:String = this.loaderInfo.parameters["uploadurl"];
if (action.length == 0)
return host;
return host.concat(action);
}
protected function clickHandler(e:MouseEvent):void
{
this.fileFilter = new FileFilter( "Any file", "*.*" );
this.fileReference = new FileReference();
this.fileReference.addEventListener(Event.SELECT, selectHandler);
this.fileReference.addEventListener(Event.COMPLETE, completeHandler);
this.fileReference.browse([this.fileFilter]);
}
protected function selectHandler(e:MouseEvent):void
{
}
protected function completeHandler(e:MouseEvent):void
{
}
}
}
2 ответа
Решение
select
а также complete
события просто нормальные Event
не MouseEvent
, Ваши обработчики ожидают MouseEvent
, так что вы получаете сообщение об ошибке, когда Flash пытается их запустить. Измените тип параметра события в ваших обработчиках на Event
:
protected function selectHandler(e:Event):void
// ...
protected function completeHandler(e:Event):void
Может ли это быть так же просто, как выбрать неправильный тип события в сигнатуре обработчика, например. MouseEvent вместо Event?
Вы также можете добавить следующий слушатель
this.fileReference.addEventListener(Event.CANCEL, cancelHandler);