PDA

Просмотр полной версии : что такое Proxy ?


miramax
12.08.2006, 21:50
После прочтения информации в справке о классе Proxy, окончательно запутался... Почему его не надо создавать? какое такое новое пространство flash_proxy ? как он обращается к методам объекта в котором его используют? нельзя ли добавлять своих медотов? Вобщем что это такое и с чем его едят. И ещё. Допустим у меня есть объект в котором когда что-то поменялось должно что-то произойти. Кокой механизм наиболее рационально применять в таком случае? Proxy? или имеет смысл создавать функцию установки атрибута и вместо object.x=15, писать к примеру object.setAttribute ('x', '15')
а setAttribute в свою очередь вызывает функцию обновления-перестройки

function setAttribute(vari:String, value:String):void{
this[vari] = value;
constract()
}

З.Ы. юзаю последнее, но не очень удобно

Nirth
13.08.2006, 14:46
Класс прокси нельзя создавать, потому что сам по себе он ничего не делает, его нужно расширять, его использование оправданно при использовании динамических классов.

miramax
13.08.2006, 16:37
Класс прокси нельзя создавать, потому что сам по себе он ничего не делает, его нужно расширять, его использование оправданно при использовании динамических классов. Так, ставлю вопрос по другому. у DisplayObject есть свойство width. когда мы меняем его значение в объекте вызываются какие-то функции после чего объект делает что нужно, в данном случае изменяет свои линейные размеры. Так вот хочу делать свойства, при изменении которых вызывались бы какие-нибудь функции. В предыдущих версиях в этом немного помогал метод watch. А в AS 3 я не знаю как решить такую задачу. Ничего не могу пидумать, кроме как самому написать аналоги функции setProperty. Можно написать к примеру,
setAttribute(name, value){
//чё-то происходит, например изменяется ширина мувика
}
Есть ли какой-нибудь способ позволяющий просто писать
obj.variable = value
и что бы после этого что-то происходило в объекте obj ?

Nirth
13.08.2006, 17:28
почему бы не сделать так

override public function set width ( value:Number ):void
{
dispatchEvent(new SomeEventClass("resize"));
}

после чего подписывай сколько надо слушателей

Nirth
13.08.2006, 17:33
или можно воспользоваться классом ObjectProxy из библиотеки mx.* ( вроде mx.utils но не уверен )

redbaron
22.08.2006, 14:38
Есть ли какой-нибудь способ позволяющий просто писать
obj.variable = value
и что бы после этого что-то происходило в объекте obj ?

более прямой ответ

override public function set width ( value:Number ):void
{
//dispatchEvent(new SomeEventClass("resize"));
super.width=value;
делать что-то
}

имхо:
не стоит перебарщивать с событийной моделью,
особенно если асинхронность не нужна