蓝天,你会有:
StaticUtil.wire( fromProperty:*, toProperty:*, usingExpression:Function );
,像这样使用
sprite1.x = 100;
sprite2.width = 200;
StaticUtil.wire( sprite1.x, sprite2.width, function(fromX:Number,toWidth:Number):void{ toWidth = fromX * 2; });
sprite.x = 150;
trace(sprite2.width); //300;
我发现动态重写getter/setter在actionscript中很可能是不可能的…这让我想到了这个初步的解决方案:
public class WireableSprite extends Sprite implements IWire
{
private var _wire:IWire;
public function WireableSprite()
{
super();
}
public function wireTo( wireable:IWire ):void
{
_wire = wireable;
}
override public function set rotation(value:Number):void
{
super.rotation = value;
if( _wire ) _wire["rotation"] = value;
}
override public function set scaleX(value:Number):void
{
super.scaleX = value;
if( _wire ) _wire["scaleX"] = value;
}
override public function set scaleY(value:Number):void
{
super.scaleY = value;
if( _wire ) _wire["scaleY"] = value;
}
override public function set x(value:Number):void
{
super.x = value;
if( _wire ) _wire["x"] = value;
}
override public function set y(value:Number):void
{
super.y = value;
if( _wire ) _wire["y"] = value;
}
}
,像这样使用
myWireableSprite.wireTo( myOtherSprite );
实际上不是很灵活…
我的问题是,有没有人知道一个聪明和更灵活的方法来做到这一点,我没有这么多重复的代码?
仔细看看
BindingUtils
和
ChangeWatcher
如果我理解正确的话,这就是你要找的。