2013-12-16 42 views
0

在Flex元素,我們可以通過這個分配狀態的元素:的Flex includein

<s:Button id="mybtn" includeIn="mystate" label="button label"/> 

我們怎樣才能做到includeIn使用ActionScript?

謝謝。

+0

使用按鈕ID在AS3中使用includeInLayout元素。 –

回答

0

國家是MXML概念,而不是AS概念。在AS中,您必須在覆蓋函數set currentState中編寫自己的邏輯。

override public function set currentState(value:String):void 
{ 
    super.currentState = value; 
    //write your logic for states 
} 
0

includeIn僞屬性只存在於MXML語言中。我將其稱爲僞屬性,因爲它沒有映射到屬性或樣式(在您的示例中爲Button類)。

相反,它是舊mx AddItems標記的簡寫符號。在這句法您的例子是這個樣子:

<mx:states> 
    <mx:State name="normal"/> 
    <mx:State name="mystate"> 
     <mx:AddItems items="{mybtn}"/> 
    </mx:State> 
</mx:states> 

<mx:Button id="mybtn"/> 

我提到這一點,因爲這是includeIn產生的ActionScript代碼非常相似。這看起來是這樣的:

states = [ 
    new State ({ 
     name: "normal", 
     overrides: [] 
    }), 
    new State ({ 
     name: "mystate", 
     overrides: [ 
      new AddItems().initializeFromObject({ 
      itemsFactory: _TestFlex_Button1_factory, 
      destination: null, 
      position: "first" 
      }) 
     ] 
    }) 
]; 

不同之處在於它使用工廠來實例化按鈕。
請注意,如果您對從MXML代碼生成的ActionScript代碼感興趣,則只需將keep-generated-actionscript標誌傳遞給編譯器(請參閱mxmlc compiler options),即可查看該代碼。

當然,如果你真的想「手動」寫邏輯(我不會),它可能是更容易覆蓋setCurrentState()或監聽CURRENT_STATE_CHANGE事件,並調用addElement()removeElement()取決於currentState值。