在与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,它工作正常。
答案 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)
当a时,事件对象作为参数传递给事件侦听器 事件发生。这是Starling的Flash事件类版本。
此课程执行flash.events.Event
之前所做的所有其他选项。在你的情况下使用import flash.events.Event会有什么好处?
然而
addEventListener(flash.events.Event.ADDED, handler);
function handler(e:flash.events.Event) {}
不会以常规方式导致任何错误。
在这种情况下,您可以继承“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 );