Actionscript 3 如何访问对象';s的父母';s属性,从他的事件函数?
我已经动态创建了Actionscript 3 如何访问对象';s的父母';s属性,从他的事件函数?,actionscript-3,flash,object,parent,Actionscript 3,Flash,Object,Parent,我已经动态创建了声音对象 var files:Object={}; files["file1"]={}; files["file1"]["snd"]=new Sound(); ...... //url etc files["file1"]["id"]='01'; //that's important files["file1"]["snd"].addEventListener(Event.COMPLETE, onSoundLoaded); function onSoundLoaded(
声音
对象
var files:Object={};
files["file1"]={};
files["file1"]["snd"]=new Sound();
...... //url etc
files["file1"]["id"]='01'; //that's important
files["file1"]["snd"].addEventListener(Event.COMPLETE, onSoundLoaded);
function onSoundLoaded(event:Event):void
//// somehow I need to get the `id` property of its parent
}
我试过了
var localRef:Object = event.target as Object;
var localRef:Object = event.target.parent as Object;
但这会带来错误。
因此,我需要从
onSoundLoaded()
函数中获取文件[“file1”][“id”]
。有可能吗?严格地回答您的问题,您的“snd”对象和“file1”对象之间没有层次关系。父关键字用于显示对象层次结构
您必须迭代文件对象以找到匹配项:
//in the sound loaded function
for(var f:Object in files){
if(f["snd"] === event.currentTarget){
var myId:String = f["id"];
//do something with the id
break; //don't keep looping
}
}
要稍微超出您的问题范围,使用包含与该声音相关的所有属性的自定义类/模型确实会更简洁、更容易。例如:(swf/fla旁边名为
MySound.as
的文件包含以下内容:
package {
import flash.media.Sound;
import flash.media.SoundLoaderContext;
import flash.net.URLRequest;
public class MySound extends Sound {
public var id:String;
public function MySound(id_:String, stream:URLRequest, context:SoundLoaderContext):void {
id = id_;
//call the original constructor method for Sound
super(stream, context);
}
}
}
现在,您可以执行以下操作:
//use a vector/array instead of an object
var sounds:Vector.<MySound> = new Vector.<MySound>();
var sound:MySound = new MySound("01");
sound.addEventListener(Event.COMPLETE, onSoundLoaded);
//add to sound array
sounds.push(sound);
function onSoundLoaded(e:Event):void {
var sound:MySound = MySound(e.currentTarget);
trace("My ID: ", sound.id);
}
//使用向量/数组而不是对象
变量声音:矢量。=新矢量。();
var声音:MySound=新MySound(“01”);
sound.addEventListener(Event.COMPLETE,onSoundLoaded);
//添加到声音阵列
声音。推动(声音);
onSoundLoaded函数(e:事件):void{
var声音:MySound=MySound(例如currentTarget);
跟踪(“我的ID:,sound.ID”);
}
根据您正在做的事情,您可以监听并响应MySound类中的完整事件(已加载),进一步将其抽象出来。严格地回答您的问题,您的“snd”对象和“file1”对象之间没有层次关系。父关键字用于显示对象层次结构 您必须迭代文件对象以找到匹配项:
//in the sound loaded function
for(var f:Object in files){
if(f["snd"] === event.currentTarget){
var myId:String = f["id"];
//do something with the id
break; //don't keep looping
}
}
要稍微超出您的问题范围,使用包含与该声音相关的所有属性的自定义类/模型确实会更简洁、更容易。例如:(swf/fla旁边名为
MySound.as
的文件包含以下内容:
package {
import flash.media.Sound;
import flash.media.SoundLoaderContext;
import flash.net.URLRequest;
public class MySound extends Sound {
public var id:String;
public function MySound(id_:String, stream:URLRequest, context:SoundLoaderContext):void {
id = id_;
//call the original constructor method for Sound
super(stream, context);
}
}
}
现在,您可以执行以下操作:
//use a vector/array instead of an object
var sounds:Vector.<MySound> = new Vector.<MySound>();
var sound:MySound = new MySound("01");
sound.addEventListener(Event.COMPLETE, onSoundLoaded);
//add to sound array
sounds.push(sound);
function onSoundLoaded(e:Event):void {
var sound:MySound = MySound(e.currentTarget);
trace("My ID: ", sound.id);
}
//使用向量/数组而不是对象
变量声音:矢量。=新矢量。();
var声音:MySound=新MySound(“01”);
sound.addEventListener(Event.COMPLETE,onSoundLoaded);
//添加到声音阵列
声音。推动(声音);
onSoundLoaded函数(e:事件):void{
var声音:MySound=MySound(例如currentTarget);
跟踪(“我的ID:,sound.ID”);
}
根据您正在做的事情,您可以监听并响应MySound类中的完整事件(已加载),进一步将其抽象出来。这正是我到目前为止努力实现的目标。)还有另一个选项可以创建扩展
声音的类。我试图制作这个包,但没有成功。是的,那会更干净。我尝试了文件[“file1”][“snd”]=new MySound()代码>但它甚至不会引发完成事件。所以,让它像planA
那样循环,因为为vector重写代码太多了。无论如何,谢谢。如果你愿意的话,我可以开始奖励100分,然后选择你的答案来帮助我。你稍后会使用加载方法是吗?要使整个事件发生,您需要实际加载一个声音文件<代码>新声音()
实际上不会加载任何内容。我不需要赏金,当你没有得到你需要的答案时,请保留你的代表。这正是我目前所能做到的。)还有另一个选项可以创建扩展声音的类。我试图制作这个包,但没有成功。是的,那会更干净。我尝试了文件[“file1”][“snd”]=new MySound()代码>但它甚至不会引发完成事件。所以,让它像planA
那样循环,因为为vector重写代码太多了。无论如何,谢谢。如果你愿意的话,我可以开始奖励100分,然后选择你的答案来帮助我。你稍后会使用加载方法是吗?要使整个事件发生,您需要实际加载一个声音文件<代码>新声音()
实际上不会加载任何内容。我不需要赏金,把你的代表留着,等你没有得到你需要的答案时再说。