2011-04-04 60 views
0

我有以下代码。问题是在我通过浏览对话框选择一个文件后,SELECT和CANCEL事件都不会被触发。FileReference不会触发SELECT事件

我有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

selectcomplete事件只是一个正常的Event,不MouseEvent。你的处理程序期待MouseEvent,所以当Flash尝试运行它们时会出现错误。改变你处理事件参数的类型Event

protected function selectHandler(e:Event):void 
// ... 
protected function completeHandler(e:Event):void 
+0

看起来你打我吧:) – 2011-04-04 07:48:42

+0

大发现,迈克!我几乎可以肯定你是对的。我想知道为什么我错过了它。这就是为什么复制粘贴是邪恶的)))我会尝试修复它今天晚上,然后接受你的答案。 – ILya 2011-04-04 09:00:24

+0

它的工作原理!谢谢! – ILya 2011-04-04 17:45:29

1

难道是因为选择的处理程序签名 例如错误的事件类型一样简单。 MouseEvent而不是Event?

,你可能也想添加下面的听众

this.fileReference.addEventListener(Event.CANCEL, cancelHandler);