Сложные объекты FlashVar, использующие SWFObject? - PullRequest
2 голосов
/ 11 ноября 2010

Можно ли передавать в Flash Player собственные объекты JavaScript, такие как массивы и объекты, подобные хэш-карте, с помощью SWFObject?

Мне нужно передать массив объектов Flash из JavaScript в переменных Flash, так что это мой код:

swfobject.embedSWF("application.swf", "divvy" "100%", "100%", null,
    { 'info': [
        { 'id': 1, 'name': "Hello, John" },
        { 'id': 2, 'name': "Hello, Dave" }
    }]);

Когда я получаю объект во Flex, я просто получаю строку, которая выглядит примерно так: «[Объект объект], [Объект объект]», что наводит меня на мысль, что мой массив сериализуется в строку до входа во Flash. Есть какой-нибудь известный обходной путь?

И да, мне нужно передать переменные Flash таким образом, поскольку они отключат некоторую загрузку, которую необходимо выполнить до запуска приложения.

Ответы [ 3 ]

6 голосов
/ 11 ноября 2010

Используйте библиотеку JSON из as3corelib и передайте весь объект, закодированный как объект json, и он станет флэш-объектом после его десериализации. Возможно, вам потребуется urlencode строки json, чтобы передать ее в виде строки, как только она попадет в as3, она будет де-urlencoded, и вы можете отменить ее сериализацию, используя функцию json as3corelib, и у вас будет объект во флэш-памяти, который представляет ваши данные .

2 голосов
/ 11 ноября 2010

Сложный объект должен быть отправлен в виде строки через flashvars, затем вы можете использовать J3-анализатор as3corelib для его чтения.

В качестве альтернативы вы можете использовать ExternalInterface для вызова функции JavaScriptчтобы вернуть объект как есть.

Как было также предложено в комментариях, вы можете сделать так, чтобы Flash запрашивал данные с самого сервера, существует множество способов сделать это.

0 голосов
/ 11 ноября 2010

Ответ: как уже упоминалось выше @Robusto , невозможно передавать нативные объекты JavaScript во Flash Player через Flashvars .Я забыл, что переменные Flash - это просто параметры GET для SWF, не более того.Таким образом, application.swf?r=123 - это то же самое, что и swfobject.embedSWF('application.swf', '100%', '100%', null, {'r': 123}, null);

Я, вероятно, просто загружу какой-нибудь XML или что-то еще.

...