2013-02-21 33 views
0

我有一個組件,我想從腳本部分調用它。從腳本中調用組件

所以不是剛開這樣的:

<s:application> 
<script> 
</script 

<ns1:msns includeIn="login" x="482" y="541"> 
    </ns1:msns> 
</s:application> 

我想把它是這樣的:

<s:application> 
<script> 
protected function mmshakkoutab(event:MouseEvent):void 
      {    
var ns1:msns:component = new component(); 
ns1:msns.x = 5 
ns1:msns.x = 5 
} 
</script 

</s:application> 

這甚至可能嗎?我已經搜索過,但所有示例都給出了腳本下方的組件。

回答

1

如果我理解正確,那麼是的,這是可能的。你是「調用組件」的術語是非標準的;但我認爲你想用ActionScript代替MXML創建組件。您可以使用ActionScript完成MXML的任何操作。

你有正確的想法;你幾乎都在那裏;我會改變一些事情。首先,在ActionScript中,您將導入該類;你不會參考MXML命名空間,在概念上是這樣的:

import com.myPackage.msns; 

在你的腳本塊中。

當您創建組件時,您需要創建一個指向它的變量。這將對應於MXML中的id字段。您的ns1:msns:component的語法可能會導致編譯器錯誤。但是,您可以創建這樣的組件:

var msns :component = new component() 

我在這裏會提到通常的慣例是大寫組件名稱。不過,您的小寫字母在語法上不是錯誤的。

然後設置組件的屬性,你已經做:

msns.x = 5 
msns.x = 5 

最後 - 這是你錯過了一步 - 必須將新組件添加到一個容器中。如果您正在處理Spark容器,則可以使用addElement,如果您使用的是MX容器,則可以使用addChild。因爲在你提供你父容器是火花應用程序的例子,我將使用的addElement:

this.addElement(msns); 

所以,你的代碼塊將被重新寫成這樣:

protected function mmshakkoutab(event:MouseEvent):void{    
var msns:component = new component(); 
msns.x = 5 
msns.x = 5 
this.addElement(msns); 
} 

你應該考慮閱讀的一件事是Flex Component LifeCycle。每個Flex組件都會通過它;並且某些事情是按照某個特定的順序完成的。對於創建兒童,您最好是擴展createChildren(),特別是如果您希望將組件創建爲應用程序標記初始設置的一部分。

1

要以編程方式實例化組件而不是聲明性實現,請使用addElement()將組件添加到顯示列表。

例如,將可視元素添加到名爲container的Spark組。

<?xml version="1.0" encoding="utf-8"?> 
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
       xmlns:s="library://ns.adobe.com/flex/spark" 
       creationComplete="creationCompleteHandler(event)"> 
    <fx:Script> 
     <![CDATA[ 
      import mx.core.UIComponent; 
      import mx.events.FlexEvent; 

      protected function creationCompleteHandler(event:FlexEvent):void 
      { 
       var component:UIComponent = new UIComponent(); 
       component.x = 5; 
       component.y = 5; 

       container.addElement(component); 
      } 
     ]]> 
    </fx:Script> 

    <s:Group id="container" /> 

</s:Application> 

在腳本塊中,使用包命名空間而不是MXML命名空間。

import com.msns.Component; 

var component:Component = new Component(); 
component.x = 5 
+0

我得+1這個即使我們在寫作的同時我們各自的答案。 :-) – JeffryHouser 2013-02-21 03:38:10

+0

謝謝你們,明天我會到達工作的第一件事我會試試看:D – 2013-02-21 13:58:03

0

如果假設你的組件的ActionScript即延長至精靈,你可以像這樣

protected function creationCompleteHandler(event:FlexEvent):void 
{ 
    var yourASClassObj:ASClass = new ASClass(); 

    var component:UIComponent = new UIComponent(); 
    this.addElement(component); 

    component.addChild(yourASClassObj); 
}