В ActionScript 3 отслеживание всех свойств объекта значения - PullRequest
0 голосов
/ 06 сентября 2010

У меня есть несколько объектов-значений, и я хочу иметь возможность создать в нем функцию для отслеживания свойств и значений, не указывая их напрямую. Это позволит мне использовать один и тот же код во всех объектах значения, а не ссылаться на переменные в объекте значения. В идеале я хотел бы заменить код в blogURLVars на этот код.

Вот пример объекта значения

package items {

public class Blog {

    private var _itemID:uint;
    private var _blogTitle:String;
    private var _blogText:String;
    private var _blogCreated:String;
    private var _blogCategory:String;
    private var _blogFrontpage:Boolean;

    public function Blog (itemID:uint,blogTitle:String,blogText:String,blogCategory:String,blogCreated:String,blogFrontpage:Boolean=false) {

        _itemID = itemID;
        _blogTitle = blogTitle;
        _blogText = blogText;
        _blogCreated = blogCreated;
        _blogCategory = blogCategory;
        _blogFrontpage = blogFrontpage;
    }

    public function get itemID():uint {
        return _itemID;
    }

    public function get blogTitle():String {
        return _blogTitle;
    }

    public function get blogText():String {
        return _blogText;
    }

    public function get blogCategory():String {
        return _blogCategory;
    }

    public function get blogCreated():String {
        return _blogCreated;
    }

    public function get blogFrontpage():Boolean {
        return _blogFrontpage;
    }

    public function toString():void {

    }

    public function blogURLVars():String {
        var s:String;
        s = "itemID="+ _itemID;
        s += "blogTitle="+ _blogTitle;
        s += "blogText="+ _blogText;
        s += "blogCategory="+ _blogCategory;
        s += "blogCreated="+ _blogCreated;
        s += "blogFrontpage="+ _blogFrontpage;
        return s;
    }

}

}

1 Ответ

3 голосов
/ 06 сентября 2010

DescrybeType может помочь здесь.Я основываю этот ответ на другом ответе (возможно, вы захотите проверить его): Самый быстрый способ получить значения объектов в as3

По сути, функция descriptionType позволит вам проверить публичный интерфейс вашего объекта.Это означает общедоступные переменные, методы получения / установки и методы (плюс некоторая другая информация, не относящаяся к вашей проблеме).Таким образом, вы получаете список всех получателей и, таким образом, возвращаете имена указанных свойств плюс их фактические значения для данного объекта.Не то чтобы это не совсем то же самое, что ваш пример кода, так как он не будет использовать закрытые переменные, а скорее вызовет получатели.

В коде это может быть что-то вроде этого (основано на коде всвязанный вопрос).

package  {
    import flash.net.URLVariables;
    import flash.utils.describeType;
    import flash.utils.getQualifiedClassName;

    public class PropertiesHelper {

        public function PropertiesHelper() {

        }

        private static var typePropertiesCache:Object = {};

        public static function getPropertyNames(instance:Object):Array {
            var className:String = getQualifiedClassName(instance);
            if(typePropertiesCache[className]) {
                return typePropertiesCache[className];
            }
            var typeDef:XML = describeType(instance);
            trace(typeDef);
            var props:Array = [];
            for each(var prop:XML in typeDef.accessor.(@access == "readwrite" || @access == "readonly")) {
                props.push(prop.@name);
            }   
            return typePropertiesCache[className] = props;
        }

        public static function getNameValuePairs(instance:Object):URLVariables {
            var props:Array = getPropertyNames(instance);
            var vars:URLVariables = new URLVariables();
            for each(var prop:String in props) {
                vars[prop] = instance[prop];
            }
            return vars;
        }
    }

}

Использование:

        var blog:Blog = new Blog(1,"title&","text","cat","created");
        var urlVars:URLVariables = PropertiesHelper.getNameValuePairs(blog);
        trace(urlVars);

Я использую объект URLVariables, поскольку кажется, что это то, что вы хотите (хотя на самом деле это не то, что делает метод blogURLVars), ноВы можете изменить это в методе getNameValuePairs, чтобы удовлетворить ваши потребности, если это необходимо.Преимущество использования объекта URLVariables заключается в том, что он автоматически обрабатывает URL-кодировку, поэтому зарезервированные символы, такие как &, = и т. Д., Не должны вызывать проблем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...