Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Observer JS <---> AS (http://www.flasher.ru/forum/showthread.php?t=111174)

BlooDHounD 27.04.2008 22:24

почему не использовался стандартный евентдиспатчер?

и зачем вообще писать его в таком виде? чем вас не устроили обычные методы?

ALiEN_ 28.04.2008 00:28

а в каком виде его надо было написать? )))
стандартный евентдиспатчер никуда не делся, для внутриклассовых собшений он остается. этот класс позволяет гонять события наружу - не задумываясь о том что и кто будет с ними делать.
раньше что бы что-то вызвать в JS надо было знать названия функций - теперь это вообще не обязательно JS сам подписывается, сам отписывается, сам генерит события. Это мегаудобно, и мне и яваскриптеру.

BlooDHounD 28.04.2008 00:44

так чем вас не устроил интерфейс IEventDispatcher ? зачем изобретать велосипед, с квадратными колёсами?

ALiEN_ 28.04.2008 01:58

а при чем тут IEventDispatcher, ведь если его использовать, у меня код многократно усложнится!?
Мне хотелось бы увидеть пример...
Я не говорю что мой класс идеален, но, повторюсь, альтернатив еще не видел ни с квадратными колесами ни с круглыми )

terbooter 28.04.2008 07:21

ALiEN_, по-моему штучка полезная.
А можете выложить исходники простенького примерчика, чтобы нагляднее было?

BlooDHounD 28.04.2008 11:21

да полно альтернатив :) просто найти надо :)

использование вашего класса несёт под собой несколько проблем:
1. я НЕ использую его как встроенный EventDispatcher, хотя он выполняет туже функцию.
2. нету типизации, используются динамические объекты.
3. отсутствуют слабые ссылки.

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

ALiEN_ 28.04.2008 13:35

BlooDHounD

ну где же? я не нашел. честно отписался вначале темы, что сначала искал, но может плохо. вобщем если поделишься альтернативой, буду благодарен. ))

1. он совсем не EventDispatcher в этом и разница. Он много шире - мостик между JS и AS событиями. EventDispatcher остается только для внутриклассовых событий, хотя можно, безусловно и использовать только мой класс и он справится на ура.
2. тут никуда не деться, ведь в JS все является объектами. И как раз только благодаря этому получилось этот класс написать.
3. Слабые ссылки? a зачем здесь слабые ссылки? в какое место их прикрутить ))

где тут подозрительные маханации? )) Что под этими махинациями имеется ввиду?

teebooter, сегодня выложу полноценный пример, надеюсь будет время.

etc 28.04.2008 13:38

ALiEN_, прозрачно — это когда я могу написать dispatchEvent(new MyCustomEvent(MyCustomEvent.CUSTOM_EVENT)) и оно будет получено в JS.
А то что вы написали ни в какие ворота. Есть стандартная схема событий, вы зачем-то придумали свою, не вписывающуюся ни в какие стандарты.

BlooDHounD 28.04.2008 14:09

Цитата:

Сообщение от ALiEN_ (Сообщение 735979)
1. он совсем не EventDispatcher в этом и разница. Он много шире - мостик между JS и AS событиями. EventDispatcher остается только для внутриклассовых событий, хотя можно, безусловно и использовать только мой класс и он справится на ура.

"совсем нет", но при этом я могу его так использовать? тогда где слабые ссылки, приоритеты, и т.д.?
Цитата:

Сообщение от ALiEN_ (Сообщение 735979)
2. тут никуда не деться, ведь в JS все является объектами. И как раз только благодаря этому получилось этот класс написать.

мне казалось что это класс для АС3 ... почему-то, когда серверники пишут сервер на Джаве под флэш, они не исходят из того, что у нас массивы имеют динамическую типизацию.
Цитата:

Сообщение от ALiEN_ (Сообщение 735979)
3. Слабые ссылки? a зачем здесь слабые ссылки? в какое место их прикрутить ))

а в какое место использовать ваш класс "на ура", если он не соответсвует простейшим принципам АС3 ?
Цитата:

Сообщение от ALiEN_ (Сообщение 735979)
где тут подозрительные маханации? )) Что под этими махинациями имеется ввиду?

всё выше перечисленное является такими махинациями.

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

BlooDHounD 28.04.2008 14:19

вот вам пример моей упращённой реализации прозрачной работы с ExternalInterface,
Код:

package by.blooddy.platform.external {

        import flash.external.ExternalInterface;
        import flash.utils.describeType;
        import flash.utils.getQualifiedClassName;
        import flash.utils.flash_proxy;

        use namespace flash_proxy;

        public dynamic class ExternalConnection {

                public function ExternalConnection() {
                        super();
                        if ( ExternalInterface.available ) {
                                var methods:XMLList = describeType( this ).method.@name;
                                var name:String;
                                for each ( var method:XML in methods ) {
                                        name = method.toXMLString();
                                        ExternalInterface.addCallback( name, this[name] );
                                }
                        } else {
                                // throw
                        }
                }

                public function call(name:String, ...arguments):* {
                        if ( ExternalInterface.available ) {
                                arguments.unshift(name);
                                ExternalInterface.call.apply( ExternalInterface, arguments );
                        } else {
                                // throw
                        }
                }

        }

}

любой наследник этого класса будет являться слушателем ExternalInterface. любой метод автоматически добавляется в callback. получаем некое подобие NetConnection и LocalConnection. дальше его можно расширить до уровня работы со свойством client, прикрутить диспатч евент, и динамический callback при добавлении нового метода.

самое главная демонстрация этого кода, это то, что разработчик не парится про проверки на avaible и добавления колбэков. это называется прозрачная работа. лежит яваскрипт, или C# приложение, разработчику наплевать: он уверен, что класс родитель справился со своей задачей на ура.


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

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