Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   namespace для всех дочерних пакетов (http://www.flasher.ru/forum/showthread.php?t=144392)

incvizitor 10.09.2010 17:44

namespace для всех дочерних пакетов
 
Дано: пакеты core, core.subPackage.
Задача: создать namespace который видно внутри core и core.subPackage и больше нигде.

Пробовал создать свой namespace и передать его параметром:

Код AS3:

package core 
{
        import core.subPackage.SubPackageClass;
 
        /**
        * ...
        * @author vaukalak
        */

 
        public class NameSpaceTest
        {
 
                internal namespace fullPackage;
 
 
                public function NameSpaceTest() {
 
                        use namespace fullPackage;
 
                        var sp:SubPackageClass = new SubPackageClass();
                        sp.np = fullPackage;
 
                }
 
                fullPackage static function _lala():void {
                        trace(1);
                }
 
        }
 
}

Код AS3:

package core.subPackage 
{
        import core.NameSpaceTest;
        /**
        * ...
        * @author inovatio
        */

        public class SubPackageClass{
 
                private var _np:Namespace;
 
                public function SubPackageClass() {
 
                }
 
                public function set np(n:Namespace):void {
                        _np = n;
                        use namespace n as Namespace;
                        (NameSpaceTest["_lala"] as Function).call();
                }
 
        }
 
}

Не работает, но ошибки не выдаёт. Есть мысли как такое реализовать?

etc 10.09.2010 18:57

Может все-таки use уберем? Плюс скорее:

Код AS3:

package core.sub {
        import core.CoreClass;
 
        /**
        * @author                                        etc
        * @version                                        1.0
        * @playerversion                        Flash 9
        * @langversion                                3.0
        */

        public class SubClass {
 
                public function SubClass() {
                        super();
                }
 
                /**
                * @private
                */

                private var _ns:Namespace;
 
                public function set ns(value:Namespace):void {
                        if (this._ns === value) return;
                        this._ns = value;
                        (CoreClass[new QName(this._ns, 'test')] as Function)();
                        CoreClass.value::test();
                }
        }
}

Код AS3:

package core {
        import core.sub.SubClass;
 
        /**
        * @author                                        etc
        * @version                                        1.0
        * @playerversion                        Flash 9
        * @langversion                                3.0
        */

        public class CoreClass {
 
                public function CoreClass() {
                        super();
                        var s:SubClass = new SubClass();
                        s.ns = sub;
                }
 
                private namespace sub;
 
                sub static function test():void {
                        trace('Sub test');
                }
        }
}


incvizitor 10.09.2010 19:10

Ого, оказалось даже проще)) Спасибо огромное!!!

Код AS3:

CoreClass.value::test();

вот это понял.

Код AS3:

(CoreClass[new QName(this._ns, 'test')] as Function)();

А вот значение QName из прочитанного в хелпе до конца не понял...

etc 10.09.2010 19:40

Ну QName как минимум для случаев, когда вот так просто по неймспейсу не обратишься.

incvizitor 10.09.2010 20:09

Ясно буду разбираться, еще раз спасибо и огромный респект!


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

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