Форум Flasher.ru

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

TanaTiX 03.12.2011 00:46

Вот что я имел ввиду. Если бы все было так просто и очевидно... Но по ходу без небольшого костыля - никуда.
Код AS3:

package modules.scrollbar 
{
        import flash.utils.describeType;
        /**
        * ...
        * @author TanaTiX - Nikonov Anton
        */

        public class ScrollerUtil
        {
                public static const READ_ONLY:String = "readonly";
                public static const WRITE_ONLY:String = "writeonly";
                public static const READ_WRITE:String = "readwrite";
 
 
                public function ScrollerUtil()
                {
 
                }
 
                public static function checkProperty(target:Object, parameter:String, access:String = READ_WRITE):Boolean {
                        var xml:XML = describeType(target);
                        if (parameter in target) {
                                if (access === READ_ONLY) {
                                        return true;
                                }
                                for each(var item:XML in xml.accessor) {
                                        if (item.@name == parameter) {
 
                                                if (item.@access === READ_WRITE) {
                                                        return true;
                                                }
                                                if (access === WRITE_ONLY && item.@access === access) {
                                                        return true;
                                                }
                                                return false;
                                        }
                                }
                        }
                        return false;
                }
        }
}


GBee 03.12.2011 00:58

Может тут уместнее заюзать интерфейс? Универсальность в какой-то мере до добра не доведет.

TanaTiX 03.12.2011 01:06

GBee, а каким образом в данном случае поможет интерфейс?
Цитата:

Универсальность в какой-то мере до добра не доведет.
Спорить даже не буду, т.к. это моя маленькая маничка. Но я о ней помню и стараюсь контролировать :) На сколько получилось будет ясно, когда закончу.

GBee 03.12.2011 01:31

Цитата:

Psycho Tiger, есть желание управлять изначально неизвестным свойством объекта. Создаю "скроллер". А вот что в качестве "скроллируемого" значения он будет "кушать" - изменение значения x, y, rotation или someValue - его интересовать не должно.
Цитата:

GBee, а каким образом в данном случае поможет интерфейс?
А объекты, свойства которого скролятся не только ваши? Просто можно прикрутить интерфейс со списком параметров для изменения (включая ограничения по значениям).

Цитата:

Спорить даже не буду, т.к. это моя маленькая маничка. Но я о ней помню и стараюсь контролировать На сколько получилось будет ясно, когда закончу.
Это я не для спора. Удачи по-любому. :о)

Bgg 03.12.2011 01:37

Цитата:

Сообщение от TanaTiX (Сообщение 1049439)
Но по ходу без небольшого костыля - никуда.

Это не небольшой, это эпических размеров костыль. Который не только не удобен, но и опасен. Пользуйтесь интерфейсами, это удобно, красиво и понятно всем.

Inet_PC 03.12.2011 02:20

Я лично не очень понял, что Вы хотите в итоге. Но костыль это еще пол беды, вторая половина, это то, что describeType жутко медленный (оно и понятно). Во флексе даже кэш для этой функции есть, я бы не стал использовать ее без явной на это необходимости.

TanaTiX 03.12.2011 02:21

Цитата:

Который не только не удобен, но и опасен. Пользуйтесь интерфейсами, это удобно, красиво и понятно всем.
А можно пример того, когда опасно? И когда с помощью интерфейса это удобно и красиво? Само собой разумеется, я не прошу за меня написать код, мне просто интересны ключевые моменты использования в данном контексте интерфейсов.

Inet_PC, то что медленный - знаю, но с другой стороны на один скролл он будет использоваться только один раз, что я считаю допустимым. Ну и если Bgg (или кто-нибудь другой) предложит достойную альтернативу - буду только рад воспользоваться хорошей идеей.

Psycho Tiger 03.12.2011 13:00

@TanaTiX, это понятно.
Приведи примеры где ты это будешь использовать, чтобы понять, в чем выгода.

3p.station 03.12.2011 13:21

как вариант
myScroller = new MyScroller(target:IScrollable, ...arg)

public interface IScrollable
{
function get height():Number;
function set height(value:Number):void;
......
}
Тоесть объект который вы отдаете скроллеру должен имплементить этот интерфейс, и значит должен иметь сеттер/геттер height например

TanaTiX 03.12.2011 13:39

3p.station, Psycho Tiger, хочется немного другого. Хочется не создавать n-е количество разных скроллов (вертикальных, горизонтальных, радиальных и еще хз каких придумает воспаленный мозг). Хочется задать базовый объект (ползунок), его минимальное и максимальное значение и свойство. Т.е. для горизонтального скролла это примерно должно выглядеть так:
Код AS3:

//создание скролла
var horizontalScroll:Scroll = new Scroll(someMovieClip, "x", 100, 250);
//конструктор
public function Scroll(target:DisplayObject, value:String, minValue:Number, maxValue:Number)

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

А то что касается определения определения наличия свойства - это для защиты от дурака.


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

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