爲什麼Flex框架的mxml語言不支持組件的構造函數或接受組件的構造函數參數?就我所知,如果它需要構造函數參數,就不可能在mxml中聲明ActionScript對象。我很好奇原因。它是Adobe的設計選擇還是與聲明性語言的工作方式有關?例如,爲什麼不讓:爲什麼mxml不支持組件構造函數?
<myNameSpace:MyComponent constructor="{argArray}"/>
爲什麼Flex框架的mxml語言不支持組件的構造函數或接受組件的構造函數參數?就我所知,如果它需要構造函數參數,就不可能在mxml中聲明ActionScript對象。我很好奇原因。它是Adobe的設計選擇還是與聲明性語言的工作方式有關?例如,爲什麼不讓:爲什麼mxml不支持組件構造函數?
<myNameSpace:MyComponent constructor="{argArray}"/>
您可以閱讀IMXMLObject幫助API關於你的問題的更多信息。他們沒有準確地告訴mxml爲什麼不支持構造函數,但它說你必須通過它的生命週期事件來控制你的mxml組件:preinitialize,initialize和creationComplete。
我想這是一個設計決策,考慮到mxml被直接轉換爲AS3代碼(您可以編譯您的應用程序,添加keep-generated-actionscript = true並查看它產生的結果)。
即使在MXML中定義了一個類,也可以通過實例化一個實例變量來實現一個構造函數,如下所示。這將在諸如「preinitialize」或「creationComplete」之類的各種事件被調度之前被調用。
此外,類變量可以用類似的方式初始化如下。
<myNameSpace:MyComponent>
<fx:Script>
<![CDATA[
private static var ignored:* = myClassConstructor();
private static function myClassConstructor():* {
// Do something - called once per class
return null;
}
]]>
</fx:Script>
</myNameSpace:MyComponent>
非常感謝您的回答,看起來非常有用。將嘗試一下。 –
我將它改爲'private const __new __():* = construct();'不僅用於語法糖,而且因爲它應該是不可變的。我也會讓'construct()*'繼承的''''protected''。 –
也許這將幫助:http://stackoverflow.com/questions/878043/how-do-i-populate-required-parameters-in-a-custom-mxml-tag –
感謝克里斯令人難以置信快速回答!我更加關注爲什麼這是不可能的,而不是一種解決方法 - 這是通常在聲明性語言中不可能的事情,爲什麼? –
你會如何聲明多個參數?總是讓他們在一個數組? –