2011-08-16 8 views
0

私はColorPickerのデフォルトとしてランダムな色を選択しようとしています。私は自分のスクリプトを、私のPanelの作成完了時に実行しています。colorPickerでselectedColorをランダムにする方法

スクリプトコードを以下に示す:

public var someColor:String = new String(); 

    private function init():void{ 
     var myColor:Number = Math.round(Math.random()*0xFFFFFF); 
     someColor = "0x"+myColor.toString(16);  
    } 

とColorPickerのためのコードは次のとおりです。

<mx:ColorPicker id="calendar_color" width="20" height="20" selectedColor="{someColor}"/> 

にもかかわらず、私はVaRのsomeColorで色を見たとき、それがランダムに表示さ色は毎回表示されますが、colorPickerでは色が表示されません。

私に教えてください、私はここで間違っています。どのように修正することができます。

あなたが [Bindable]メタデータを追加する必要があり
+1

タイミング問題? addedToStageイベントを使ってinitを呼び出してみてください –

答えて

0

:私はこのポストから言うが、どのようなクラスの

public var someColor:String = new String(); 

であることはできませんあなたはちょうどそれができることを確認したくなるでしょう

[Bindable] 
public var someColor:String = new String(); 
+3

@ Zeeshan Rang、バインドする必要がある理由はありますか? 'calendar_color.selectedColor = yourColor'を実行できませんでしたか? –

0

を。あなたが作成した参照を介して到達しました。

2

1)なぜsomeColorStringとしていますか?したがって、NumberからStringmyColor.toString(16))とStringからuintselectedColor="{someColor}")の2つのunnececcary型の変換があります。理由だけでこれを書いていない:

[Bindable] public var someColor:uint = 0; 

private function init():void{ 
    someColor = Math.random()*0xFFFFFF; 
} 

2)そして、もう一つは、私も好きではない - 現在の答えにあなたはバインディング実際uneccecary持って、一度だけ撮影すると、あなたは忘れてはならない1 youreコードのどこかでinit()に電話してください。私はより良い関数呼び出しでそれを変更したい:

ここ getRandomColor()
private function getRandomColor():uint{ 
    return Math.random()*0xFFFFFF; 
} 

<mx:ColorPicker id="calendar_color" width="20" height="20" 
    selectedColor="{getRandomColor()}"/> 

が自動的ColorPicker初期化時に呼び出されます。不可避的な型変換(Numberからuintまで)、バインディングなし、無駄なプロパティー、短いコード。

これは時期尚早の最適化ではないため、早すぎるペシミザライゼーションが削除されます。

関連する問題