2008-12-15 75 views
4

當我在MXML文件中設置狀態時,我偶爾會發現一個錯誤。我得到的錯誤說mx:states無法解析爲組件實現。mx:states爲什麼無法解析爲組件實現?

我在下面的url中看到,這個問題是由擴展組件引起的,它以某種方式拋出了編譯器解析mx:states的能力。我不明白爲什麼會這樣,但我沒有自己的任何答案。我也不一定能使這種方法適用於我所有的擴展組件。

http://life.neophi.com/danielr/2007/01/could_not_resolve_to_a_compone.html

的解決方法,我想出了是不使用任何名稱空間。 所以,我的代碼則是這樣的:

<states>...</states> 

而不是:

<mx:states>...</mx:states> 

使這個陌生人(至少對我來說)是一個事實,即標籤的孩子 - - 不有這個問題。 mx:狀態無法解析,但其子mx:State可以。 mx:SetProperty - mx:State的子項 - 也被解析。

任何人都可以解釋這一點,和/或提供比我想出的問題更好的解決方案?

順便說一句,我看到與mx:transitions相同的問題。

回答

17

如果您有自定義組件,您可能會將其放在mx以外的命名空間中。通過刪除名稱空間,您正處於正確的軌道,但您不必這樣做。考慮以下示例

<example:MyComponent xmlns:mx="http://www.adobe.com/2006/mxml" 
    xmlns:example="com.example.*"> 
</example:MyComponent> 

在該代碼中,我們在com.example包中有一個名爲MyComponent的自定義組件。現在,我們如何添加自定義狀態?這很容易!

<example:MyComponent xmlns:mx="http://www.adobe.com/2006/mxml" 
    xmlns:example="com.example.*"> 

    <example:states> 
     <mx:State name="CustomState"> 
     </mx:State> 
    </example:states> 

</example:MyComponent> 

屬性的組件,如狀態過渡,或上一個按鈕,甚至標籤可以作爲子元素被創建。這些屬性必須使用與組件實例相同的名稱空間。財產來自繼承鏈的地方並不重要。即使com.example.MyComponent擴展了mx.containers.Canvas,states屬性也將使用定義MyComponent的XML名稱空間。

總之,不要以爲狀態財產MX:各國因爲MX:屬性的前綴僅僅從組件繼承。但是,當我們定義實際狀態本身時,我們必須使用mx:,因爲這是一個類(不是屬性),而且該類是在mx名稱空間中定義的。

再向前邁在進一步的解釋,你可以改變http://www.adobe.com/2006/mxml命名空間是其他東西比MX

<zzz:VBox xmlns:zzz="http://www.adobe.com/2006/mxml"> 
    <zzz:states> 
    </zzz:states> 
</zzz:VBox> 

在這個例子中,我們改變MXZZZ。現在,狀態屬性必須以zzz爲前綴:而不是mx:

+0

Josh, 感謝您的回覆。您能否進一步解釋爲什麼mx不是擴展實現該名稱空間的組件的組件中的有效命名空間?爲什麼這不是一個問題,比如mx:Button? – 2008-12-15 20:55:39

1
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" 
     width="100%" 
     height="100%" 
     backgroundColor="#f7f7f7" 
     xmlns:common="com.americanexpress.voice.view.component.common.*"> 
    <mx:states name="edit"> 

爲什麼這會失敗?我還發現,當我定義了多個名稱空間時,這會失敗。刪除<mx:解決了問題。

相關問題