2011-08-16 32 views
0

我想要随机选择颜色作为我的ColorPicker的默认设置。我正在运行我的脚本创建完成我的面板。如何将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不显示颜色。

请让我知道,我在这里做错了什么。以及如何修复它。

+1

可能的计时问题?尝试使用addedToStage事件来调用init –

回答

0

您需要添加[Bindable]元数据:

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

@Zeeshan Rang,有什么理由甚至需要绑定?你不能只是'calendar_color.selectedColor = yourColor'吗? –

0

我无法从这篇文章告诉但什么类是

public var someColor:String = new String(); 

你只是想验证它可以。通过你提到的参考达成。

2

1)为什么你有someColor作为String?因此,您有两种不必要的类型转换:从NumberStringmyColor.toString(16))和从StringuintselectedColor="{someColor}")。为什么不只是写:

[Bindable] public var someColor:uint = 0; 

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

2)还有一件事我也不喜欢 - 在当前的答案,你已经有了实际uneccecary绑定,一个只会拍一次,你不应该忘记在代码中的某个地方拨打init()。我最好改变它的函数调用:

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

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

这里getRandomColor()将自动被调用的ColorPicker初始化。一个不可避免的类型转换(从Numberuint),没有绑定,没有无用的属性,更短的代码。

这不是过早的优化,这是消除过早的悲观。