0

我的 ActionScript 类中有一个可绑定的公共属性,我想访问由 [Bindable] 标记生成的私有 var。

例如,如果我声明:

[Bindable] public var yummyTime:String = "abcdefghij";

在运行时,它将值存储在一个名为_719695190yummyTime. 有谁知道我怎么能预测这个名字?

4

2 回答 2

1

即使你可以预测那个名字;您将无法在编译时访问它,因为您会收到未定义变量的编译器错误。为什么需要访问它?

我怀疑你想做的任何事情都可以通过将你的公共变量定义扩展为定义了 Bindable 事件的 get/set 方法来完成。像这样:

private var _yummyTime : String = 'abcdefghij'
[Bindable(event='yummyTimeChanged'] 
public function get yummyTime():String{
 return _yummyTime;
}

public function set yummyTime(value:String):void{
 _yummyTime = value;
 dispatchEvent(new Event('yummyTimeChanged'));
}

然后在您的组件中,您将拥有私有变量 _yummyTime 和公共变量 yummyTime。

于 2013-02-03T21:36:48.090 回答
0

这个:

[Bindable] public var yummyTime:String;

和写法一样:

 private var _yummyTime:String;
 [Bindable]
 public function get yummyTime():String
 {
     return _yummyTime;
 }   
 public function set yummyTime(value:String):void
 {
     _yummyTime = value;
 }

在第二个代码片段中,您刚刚明确写出了私有变量的 getter 和 setter。

另请注意,[Bindable] 标签在 setter 函数中添加了一个特殊检查,如下所示:

    private var _yummyTime:String;
    [Bindable(event="yummyTimeChange")]
    public function get yummyTime():String
    {
        return _yummyTime;
    }

    public function set yummyTime(value:String):void
    {
        if( _yummyTime !== value)
        {
            _yummyTime = value;
            dispatchEvent(new Event("yummyTimeChange"));
        }
    }

如果您不希望检查if( _yummyTime !== value)您可以在 [Bindable] 标记中添加自定义事件名称,就像我给出的最后一个示例一样,只是不要写出检查。

于 2013-02-03T22:45:44.107 回答