2012-03-21 24 views
0

我碰到這段代碼,它吸引了我。我以前從未見過這樣的皮膚。我想知道是否有任何缺點和替代方案。例如,是否像addChild調用那樣是cpu密集型?通過文檔狀態蒙皮Flex中的按鈕

<s:Button id="loginoutBtn" right="10" top="10" label="Log out" label.loggedout="Log in" skinClass.loggedin="skins.FBLogoutButtonSkin" skinClass.loggedout="skins.FBLoginButtonSkin" click.loggedin="logout()" click.loggedout="login()"/> 

背景:上面的按鈕是Login示例的一部分。我已經使用了很多皮膚,但是這個過程幾乎總是導致一個新組件與新皮膚一起使用。此外,將一個ToggleButton,但上面的一個很好的用例?

更好的問題是,如果你必須在x位置有一個登錄和註銷按鈕,你會怎麼做?

我認爲在這種情況下,我有兩個按鈕設置爲它們相關的皮膚和每一個includeIn,所以,

<s:Button id="loginBtn" includeIn="loggedIn" right="10" top="10" skinClass="skins.FBLoginButtonSkin" click="login()"/> 

<s:Button id="logoutBtn" includeIn="loggedOut" right="10" top="10" skinClass="skins.FBLogoutButtonSkin" click="logout()" /> 

回答

1

在這種特殊情況下,我會爲帶有自定義外觀的ToggleButton。

爲什麼?只有

  • 所需的一個自定義的皮膚,而不是兩個
  • 清潔代碼在「主機」成分:需要沒有兩個按鈕或一束狀態相關的屬性;只是'選擇'需要被綁定到國家。
  • 由於您已經問過:可能是CPU密集程度較低的選項(因爲A.只有一個Button和B.只有一個外殼)。但說實話,我認爲它確實無關緊要:單個Button的性能實際上並不相關。

<s:ToggleButton id="loginBtn" selected.loggedin="true" selected.loggedout="false" 
       skinClass="skins.FBLoginToggleButtonSkin" 
       click="logInOrOut(loginBtn.selected)" /> 

注:兩個標籤將自定義ToggleButtonSkin內部定義:

<s:Label text="log in" text.selectedStates="log out" /> 
+0

我曾經想過皮膚最長的時間作爲多用途,但我看到他們被創建爲一個更多的偏離。這是你遇到的情況嗎? – 2012-03-21 11:28:59

+0

@ 1.21千兆瓦一些皮膚可以是'多用途的';通常是你在一個主題中創建的皮膚;例如你創建一個ButtonSkin,它貫穿整個應用程序應用於所有的按鈕;其他可以是一次性的;這將永遠在不可重用的自定義組件的情況下;但是它們也可以應用於特定情況下的可重用組件,例如:我將皮膚視爲該組件的具體樣式:它只是一種以不同方式呈現組件的方法但不應該改變其行爲或意義。 – RIAstar 2012-03-21 13:15:20

+0

謝謝RIAstar – 2012-03-22 04:39:11

1

您可以做兩個按鈕或一個按鈕,更改屬性。要查看性能方面的影響差異,可能需要保留生成的AS3代碼。詳細信息請參閱此鏈接。

http://saravananrk.wordpress.com/2008/05/26/keep-generated-actionscript-in-flex/

兩種方法都是有效的,但我寧願兩個不同的按鈕,因爲它們很可能在未來被改變,變得越來越不同。有一個按鈕的所有屬性都基於狀態沒有太大的意義。也可能有兩個按鈕,它保持代碼清潔。

+0

感謝@keyle - 你創建的皮膚一勞永逸或每個項目? (同樣的問題要求RIAstar – 2012-03-21 11:33:10

+0

一個皮膚和2個CSS屬性 – keyle 2012-03-26 05:52:52