如何在同一个班级

时间:2016-11-29 19:16:17

标签: actionscript-3 flash starling-framework

在与Starling合作时,我遇到了这个问题。有时候使用flash事件很重要。

import starling.events.Event;
import flash.events.Event ;
var _myFile_Fr:FileReference = new FileReference();
_myFile_Fr.addEventListener(Event.COMPLETE, onFileLoaded);
_myFile_Fr.load();
function onFileLoaded(event:Event ):void
{
  trace( event.target.data ) // <<<< compiler error:       


}
  

通过引用访问可能未定义的属性数据   static type starling.events:EventDispatcher

我尝试使用完整的规范

function someEventHandler(event:flash.events.Event ):void
{
  ....
}

也是这样:

_myFile_Fr.addEventListener(flash.events.Event.COMPLETE, onFileLoaded);
_myFile_Fr.load();

function onFileLoaded(e:Event ):void 
{
    trace( e.target.data );
}       

但上述方法无效,并显示编译时错误。

  

访问未定义的属性Flash

然后出路是什么?

通过静态类型starling.events:EventDispatcher的引用访问可能未定义的属性数据。使用flash.events.Event,它工作正常。

4 个答案:

答案 0 :(得分:1)

问题是由于编译器认为您想要的事件是starling.events.Event而引起的。 Starling事件具有属性target,但它(与flash事件不同)属于特定类型EventDispatcher,其中flash只是通用Object。因此,当您查找event.target.data时,您正在尝试在starling EventDispatcher对象上查找属性data。 EventDispatcher类中没有数据属性,因此抛出该错误 您需要注意,当您同时拥有starling.events.Event和flash.events.Event时,您需要准确指定您期望的那个(使用其完全限定名称)。

public function onLoad(event:flash.events.Event):void

public function onLoad(event:starling.events.Event):void

但不是

public function onLoad(event:Event):void

除非你只导入了flash或starling事件,否则都不是。

答案 1 :(得分:0)

来自starlling Doc

  

当a时,事件对象作为参数传递给事件侦听器   事件发生。这是Starling的Flash事件类版本。

此课程执行flash.events.Event之前所做的所有其他选项。在你的情况下使用import flash.events.Event会有什么好处?

然而

addEventListener(flash.events.Event.ADDED, handler);
function handler(e:flash.events.Event) {}

不会以常规方式导致任何错误。

starlling Doc

  

在这种情况下,您可以继承“Event”并添加所有属性   您需要的信息。

答案 2 :(得分:0)

我找到的唯一方法是不在任何地方使用Event类名。那么,对我有用的是:

import starling.events.Event;

var _myFile_Fr:FileReference = new FileReference();
_myFile_Fr.addEventListener(Event.COMPLETE, onFileLoaded);
_myFile_Fr.load();
function onFileLoaded(event):void //<< Don't use class name specification
{
  trace( event.target.data )  


} 

答案 3 :(得分:0)

  

访问未定义的属性Flash

你是正确的,你需要使用完全限定的类名flash.events.Event,但我怀疑你输错了。请注意,错误显示Flash,其中第一个字母为大写。 ActionScript区分大小写,因此Flash.events.Event不起作用。它必须是flash.events.Event,其中flash都是小写的。

import starling.events.Event;
import flash.events.Event;
var _myFile_Fr:FileReference = new FileReference();
_myFile_Fr.addEventListener(flash.events.Event.COMPLETE, onFileLoaded);
_myFile_Fr.load();
function onFileLoaded(event:flash.events.Event):void
{
    //see below for changes
}
  

通过静态类型starling.events:EventDispatcher

的引用访问可能未定义的属性数据

这正是它所说的。事件的target属性输入为EventDispatcher。如果你知道这是更具体的东西,你需要投射它,如下所示:

var file:FileReference = FileReference(event.target);
trace( file.data );