ActionScript3.0自定义Flex组件问题 重写组件的使用
生活随笔
收集整理的這篇文章主要介紹了
ActionScript3.0自定义Flex组件问题 重写组件的使用
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
?
最近在做Flex的一些學(xué)習(xí),需要對Flex組件重寫,當(dāng)然可以兩種選擇MXML和ActionScript3.0重寫,當(dāng)然MXML的可視化的操作為重寫提供了方便,但是要是更改組件的默認(rèn)屬性和添加一些框架屬性ActionScript是必須的。我的經(jīng)歷重寫一個可以最大化,最小化,關(guān)閉的Panel,這是改變Flex中Panel的本質(zhì)屬性的,只用通過ActionScript3.0來完成了。 網(wǎng)上有個SuperPanel和Flexlib寫的相當(dāng)成熟和不錯,我選擇的是SuperPanel(個人覺得代碼寫的相當(dāng)漂亮)。 寫好以后,就是MXML中應(yīng)用了由于繼承了Panel,所以可以直接在<mx:></mx>中顯示,但是這里會出現(xiàn)一個問題,我個人覺得是編輯工具應(yīng)該改進(jìn)的或者說是Bug,組件繼承Panel自定義為SuperPanel,在要應(yīng)用的MXML應(yīng)用程序中里的容器里添加使用,OK,一切都可以通過,但是 <mx:Canvas?? ??? ?id="panelContainer"
?? ??? ?width="100%" height="100%"
?? ? >
?? ??? ?
?? ??? ?<containers:SuperPanel
?? ??? ??? ?id="myPanel"
?? ??? ??? ?title="My Panel"
?? ??? ??? ?x="20" y="20"
?? ??? ??? ?width="300" height="200"
?? ??? ??? ?minWidth="200" minHeight="100"
?? ??? ??? ?horizontalAlign="center"
?? ??? ??? ?verticalAlign="middle"
?? ??? ??? ?allowDrag="true"
?? ??? ??? ?allowResize="true"
?? ??? ??? ?allowClose="true"
?? ??? ??? ?allowMaximize="true"
?? ??? ??? ?allowMinimize="true"
?? ??? ??? ?sizeRatio="{useSizeConstraintCheck.selected ? '4:3' : null}"
?? ??? ??? ?resizeEffect="Resize"
?? ??? ??? ?moveEffect="Move"
?? ??? ??? ?close="panelContainer.removeChild(myPanel);"
?? ??? ?>
?? ??? ??? ?<mx:Label
?? ??? ??? ??? ?text="SuperPanel"
?? ??? ??? ??? ?fontSize="24"
?? ??? ??? ??? ?fontWeight="bold"
?? ??? ??? ?>
?? ??? ??? ??? ?
?? ??? ??? ??? ?<mx:filters>
?? ??? ??? ??? ??? ?<mx:DropShadowFilter alpha="0.5"/>
?? ??? ??? ??? ?</mx:filters>
?? ??? ??? ??? ?
?? ??? ??? ?</mx:Label>
?? ??? ??? ?
?? ??? ??? ?<mx:Label
?? ??? ??? ??? ?text="By: Brandon Meyer"
?? ??? ??? ?/>
?? ??? ??? ?
?? ??? ?</containers:SuperPanel>
?? ??? ?
?? ?</mx:Canvas>
???
當(dāng)你想在Reperter中這樣使用的話,就會報錯,看代碼:
<mx:Canvas id="panelShow" width="100%" height="100%" ><mx:ToggleButtonBar id="ToggleBtn" dataProvider="{myChaters}" /><mx:ViewStack id="myChaters" width="100%" height="100%" x="4" y="19"><mx:Repeater id="chatWindow" dataProvider="{allChatPaneWindow}"><containers:SuperPanelid="myPanel"title="{chatWindow.currentItem.label}"x="20" y="20"width="300" height="200"minWidth="200" minHeight="100"horizontalAlign="center"verticalAlign="middle"allowDrag="true"allowResize="true"allowClose="true"allowMaximize="true"allowMinimize="true"sizeRatio="{true ? '4:3' : null}"resizeEffect="Resize"moveEffect="Move"close="this.parent.removeChild(myPanel);"></containers:SuperPanel></mx:Repeater></mx:ViewStack></mx:Canvas>?這里就會報錯,1067: Array 類型值的隱式強(qiáng)制指令的目標(biāo)是非相關(guān)類型 flash.display:DisplayObject ,我就不能理解,為什么是繼承Panel來的,但這里就成為非DisplatObject了,不可理解,上面的測試明顯是DisplayObject,而且經(jīng)過編譯可以知道SuperPanel就是Panel的加強(qiáng)版!這里編輯器應(yīng)該可以獲得信息,無奈Google+Baidu
最后還是沒有解決,去了Adobe官網(wǎng)。
<mx:Repeater id="chatWindow" dataProvider="{allChatPaneWindow}"> 需要把Array轉(zhuǎn)化為mx.contrains里面包含的組件,才能傳遞信息,所以出現(xiàn)這個錯誤,所以改一下就OK了: <containers:Panelid="myPanel"title="{chatWindow.currentItem.label}"x="20" y="20"width="300" height="200"minWidth="200" minHeight="100"horizontalAlign="center"verticalAlign="middle"allowDrag="true"allowResize="true"allowClose="true"allowMaximize="true"allowMinimize="true"sizeRatio="{true ? '4:3' : null}"resizeEffect="Resize"moveEffect="Move"close="this.parent.removeChild(myPanel);"></containers:Panel>
?錯誤得到解決,花了幾個小時的時間,最后總是解決了。但是不太明白的是,為什么編輯器不能直接識別出SuperPanel????????
希望這些對學(xué)習(xí)Flex遇到相似問題的有所幫助!!!!!
轉(zhuǎn)載于:https://www.cnblogs.com/blog-li/archive/2012/02/13/Flex.html
總結(jié)
以上是生活随笔為你收集整理的ActionScript3.0自定义Flex组件问题 重写组件的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ibatis代码生成器
- 下一篇: lsof 查看进程打开那些文件 和 查看