Передача данных из родительского SWF в дочерний SWF - PullRequest
0 голосов
/ 22 июля 2011

У меня есть два swf, A.swf и B.swf: B.swf - ребенок A.swf.Каждый SWF имеет свой DocumentClass.Теперь: я должен передать 4 массива из A.swf в DocumentClass из B.swf.Что может быть лучшим способом?Является ли слушатель в B.swf хорошей идеей?Я заметил, что есть возможность отправлять данные через строку запроса, но я бы хотел, если возможно, избежать этого решения.

Ответы [ 2 ]

1 голос
/ 22 июля 2011

Решение EventListeners

У вас есть GlobalEventListener (http://en.wikipedia.org/wiki/Singleton_pattern), который используется как в A.swf, так и в B.swf.

У вас естьcustomEvent, который расширяет Event и имеет возможность отправлять массивы.

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 )

в A.swf после загрузки B.swf и готовности ваших массивов к передаче:

BSWFLoader.content["transferrArrays"] ( [your,arrays,needed,for,b] );
0 голосов
/ 22 июля 2011

Я бы не советовал начинать идти по пути Синглетонов.Рано или поздно вы об этом пожалеете.(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, но если вы щелкнете по миниатюре, щелкните правой кнопкой мыши по фильму и выберите «Просмотр источника», выувидит исходный код. Источник фильма Flash, который реализует интерфейс Blusher, находится в папке flashSrc.

HTH;

Amy

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...