2012-05-03 249 views
0

說我有一個對象ActionScript中,對象和事件偵聽器

var my_obj = new Object(); 
my_obj['key'] = value; 

有沒有辦法將事件監聽器添加到超值,喜歡

my_obj['key'].addEventListener(Blah Blah); 

我還有很長的(ISH)名單時間軸上按鈕的佈局(佈局對於時間軸而言更加有意義,而不是通過動作來構建佈局)。

button1 = plays "frame label 1" 
button2 = plays "frame label 2" 

等....所以我只是想在一個數組

obj["button1"] = "framelabel1" 
arr.push(obj); 

然後存儲一切我可以對所有的按鈕和使用對象的一個​​事件處理程序來獲取幀標籤值...

+0

您能否讓我們停止猜測究竟是什麼問題? :) –

回答

1

是的,你可以做的正是你要問在你提到的具體的方式是什麼,這裏有一個例子:

var value:Sprite = new Sprite(); 

var my_obj = new Object(); 
my_obj['key'] = value; 

所以美其名曰:

my_obj['key'].addEventListener(Event.ENTER_FRAME, _onEnterFrameHandler); 

是完全與通話相同:

value.addEventListener(Event.ENTER_FRAME, _onEnterFrameHandler); 
1

這個問題對我來說很模糊。我的猜測是,每次設置值時都需要觸發某些東西。如果是這種情況,那麼你必須創建一個自定義類,並在那裏聲明一個getter-setter屬性。

例如:

package 
{ 
    import flash.display.Sprite; 

    public class TestAccessor extends Sprite 
    { 
     private var someVarValue:uint = 0; 

     public function TestAccessor() 
     { 
      super(); 
     } 

     public function get someVar():uint 
     { 
      return someVarValue; 
     } 

     public function set someVar(value:uint):* 
     { 
      someVarValue = value; 
      // this is the place where someVar is set. 
      // do whatever else you like here, 
      // you may choose to dispatch an event from here if you need. 
     } 

    } 
} 

回到AS1,AS2時代,我們必須爲這一目的watch()addProperty(),但這些時間是早已消失。爲了好。 :)