Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Искажение объекта типа Event при передаче через LocalConnection (http://www.flasher.ru/forum/showthread.php?t=117200)

outfoxer 21.10.2008 18:54

Искажение объекта типа Event при передаче через LocalConnection
 
Передаю объект типа Event через LocalConnection, принимающая сторона получает непонятный объект у которого нет ни одного свойства

Код:

var lc1:LocalConnection = new LocalConnection();
lc1.connect('lc1');
lc1.client = this;

var lc2:LocalConnection = new LocalConnection();
var e:Event = new Event('EVENT_TYPE');
trace('sending: ', e, e.type)
lc2.send('lc1', 'f', e);

function f(p)
{
        trace('receiving: ',p, p.type)
}

выводит:

Код:

sending:  [Event type="EVENT_TYPE" bubbles=false cancelable=false eventPhase=2] EVENT_TYPE

receiving:  [object Object] undefined

Может кто сталкивался с этим? Как можно передать объект типа Event по LC?

silin 21.10.2008 20:05

нельзя объект передать, только простые типы

outfoxer 21.10.2008 20:11

как это нельзя :) вот передача объекта:

Код:

var lc1:LocalConnection = new LocalConnection();
lc1.connect('lc1');
lc1.client = this;

var lc2:LocalConnection = new LocalConnection();
var e = {type:'EVENT_TYPE', someVar:'value'};
trace('sending: ', e, e.type)
lc2.send('lc1', 'f', e);

function f(p)
{
        trace('receiving: ',p, p.type)
}


все отлично работает и передается без искажений:
Код:

sending:  [object Object] EVENT_TYPE

receiving:  [object Object] EVENT_TYPE


silin 21.10.2008 23:14

извиняюсь за дезу, и впрямь передается..
однако передать в объекте метод уже не выходит
с Евентом дело, видимо, в этом - все свойства у него реализованы через геттеры

alexcon314 22.10.2008 00:36

если важна именно информация
Цитата:

[Event type="EVENT_TYPE" bubbles=false cancelable=false eventPhase=2]
можно так
Код:

package {
        import flash.events.Event;
        import flash.net.LocalConnection;
        import flash.display.MovieClip;
        public class Main extends MovieClip {
                public var f:Function
                public function Main() {
                        var lc1:LocalConnection = new LocalConnection();
                        lc1.connect('lc1');
                        lc1.client = this;


                        var lc2:LocalConnection = new LocalConnection();
                        var e:Event = new Event('EVENT_TYPE');
                        trace('sending: ', e, e.type);
                        lc2.send('lc1', 'f', e.toString());

                        f = function (p){
                        trace('receiving: ',p)
                        };
                }
        }
}

Вообще, факт передачи уже сам по себе евент. Так что смысл передавать именно объект Event? Тем более, что это не простой объект в смысле простого набора именованых свойств и их значений, silin прав. Скажем MovieClip тоже не передается по ЛЦ как таковой. А вот массив передать можно.
Код:

package {
        import flash.events.Event;
        import flash.net.LocalConnection;
        import flash.display.MovieClip;
        public class Main extends MovieClip {
                public var f:Function
                public function Main() {
                        var lc1:LocalConnection = new LocalConnection();
                        lc1.connect('lc1');
                        lc1.client = this;
                        var lc2:LocalConnection = new LocalConnection();
                        var e:Array =  [1,'2', null];
                        lc2.send('lc1', 'f', e);
                        f = function (p){
                        trace(p[0],typeof(p[0]),p[1],typeof(p[1]),p[2],typeof(p[2]))
                        };
                }
        }
}

Согласно спецификации AMF3, а ЛЦ использует его, можно передавать
Цитата:

undefined, null, false, true, integer, double, string, xml-doc, date, array, object, xml, byte-array
Можно уточнить что реализовано уже сейчас.

BlooDHounD 22.10.2008 01:11

мля. читаем доку. передаются только объекты, которые можно серилизовать через AMF. любой экземпляр класса передаётся как обычный Object. тоесть передаётся анонимный объект с динамическими свойствами.


Часовой пояс GMT +4, время: 05:16.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.