2010-07-23 30 views
0

我需要創建一個Flex組件的擴展,這顯然意味着無論何時使用父組件,都應該能夠使用新組件。但我沒有辦法做到這一點,Flex提供了兩種擴展組件的方式,通過定義一個擴展父代的AS類或創建一個使用父組件作爲根元素的MXML文件;在這兩種情況下,我都無法使用嵌套元素來配置孩子,就像我爲父母配置孩子一樣。有沒有真正擴展Flex組件的方法?

EG

package components { 
import mx.controls.AdvancedDataGrid; 

public class FixedDataGrid extends AdvancedDataGrid { 
    public function FixedDataGrid() { 
     super(); 
    } 
} 
} 

這是有效的MXML

<mx:AdvancedDataGrid> 

... 

    <mx:columns> 

... 

這不是有效的MXML

<mx:FixedDataGrid> 
... 
<mx:columns> 
... 

看起來像一個有效它不會是 - 一個關係。

回答

1

當通過新MXMLtag定義屬性,該屬性必須的包含在與標籤相同的名稱空間中指定。

所以你可以做這樣的事情:

<myComp:FixedDataGrid columns="SomeArray"> 

沒有任何問題。如果使用MXML標籤語法來定義列數組屬性,你需要這樣做:

<myComp:FixedDataGrid > 
<myComp:columns> 
    <mx:AdvancedDataGridColumn /> 
    <mx:AdvancedDataGridColumn /> 
</myComp:columns> 
</myComp:FixedDataGrid > 

columns是對AdvancedDataGrid的屬性,因此必須在相同的命名空間被定義爲您的自定義擴展, AdvancedDataGrid。 AdvancedDataGridColumn是一個不同的組件,所以它將在mx命名空間中定義。

正如替代海報所述,'myComp'命名空間必須在應用程序的頂層組件中定義。大多數情況下,Flash Builder會自動爲您添加名稱空間。

+0

謝謝!你的回答非常有幫助,解決了這個問題。 – Tony 2010-07-23 13:04:08

3

您FixedDataGrid不會在相同的命名空間MX組件存在...

你需要指定正確的命名空間,它是合法的。

<mx:Application xmlns:components="components.*" ... > 
<components:FixedDataGrid> 
    .... 

你正在做的MXML等價的組件包,那麼你的聲明組件抱怨不能引用它作爲mx.controls.FixedDataGrid

+0

對不起,我只是沒有準確地重現我的代碼。我實際上有xmlns:custom =「components。*」和,但它不能解決問題。 – Tony 2010-07-23 12:58:51

+0

是你的問題與列?它們需要與父代存在於相同的命名空間中,因此它們將被聲明爲 <組件:列> – 2010-07-23 13:03:16