我有两个swf,A.swf和B.swf:B.swf是A.swf的孩子。每个swf都有DocumentClass。现在:我必须将A.swf中的4个数组传递给B.swf的DocumentClass。哪个可能是最好的方式? B.swf的听众是个好主意吗?我注意到有可能通过查询字符串发送数据但我想尽可能避免这种解决方案。
答案 0 :(得分:1)
EventListeners解决方案
你有一些在A.swf和B.swf中使用的GlobalEventListener(http://en.wikipedia.org/wiki/Singleton_pattern)。
你有一个自定义事件,它扩展了事件并有可能发送数组。
package com
{
import flash.events.Event;
public class TransferrArray extends Event
{
public static const TRANSFERRING:String = 'transferring';
private var _array:Array;
public function TransferrArray(type:String, array:Array, bubbles:Boolean=false, cancelable:Boolean=false)
{
super(type, bubbles, cancelable);
_array = array;
}
public function get array ():Array
{
return _array;
}
}
}
在B.swf你放的地方:
GlobalEventListener.addEventListener ( TransferrArray.TRANSFERRING, handleTransfer )
private function handleTransfer ( e : TransferrArray) : void
{
e.array // <- do what you need with it
}
A.swf中的,当你的阵列准备好被转移时:
GlobalEventListener.dispatchEvent ( new TransferrArray ( TransferrArray.TRANSFERRING, [your,arrays,needed,for,b] );
直接解析
B.swf需要(B.swf的主要类别):
public function transferrArrays ( array : Array )
加载B.swf后,在A.swf中,你的数组已准备好转移:
BSWFLoader.content["transferrArrays"] ( [your,arrays,needed,for,b] );
答案 1 :(得分:0)
我不建议开始沿着单身人士的道路走下去。迟早,你会后悔的。 (http://misko.hevery.com/2008/08/17/singletons-are-pathological-liars/)
相反,使您的子swf的基类实现一个接口,该接口具有您要在其上设置的值的变量。一旦加载器调度complete事件,将swf转换为该接口并简单地将变量设置为正常。
查看此处的示例http://flexdiary.blogspot.com/2009/01/example-of-casting-contets-of-swfloader.html。这是一个Flex示例,但如果您单击缩略图,然后右键单击电影并选择“查看源”,您将看到源代码。实现Blusher接口的Flash影片源位于flashSrc文件夹中。
HTH;
艾米