我希望我的Button能够使用我自己定义的状态初始化它的currentState。我正在监视互联网连接,我的按钮的初始当前状态将取决于连接状态。我认为初始状态是在SkinnableComponent commitProperties函数上设置的:
override protected function commitProperties():void
{
super.commitProperties();
if (skinChanged)
{
skinChanged = false;
validateSkinChange();
}
if (skinStateIsDirty)
{
// This component must first be updated to the pending state as the
// skin inherits styles from this component.
var pendingState:String = getCurrentSkinState();
stateChanged(skin.currentState, pendingState, false);
skin.currentState = pendingState;
skinStateIsDirty = false;
}...
所以我有我的按钮皮肤,根据连接状态,我想更改图标。我覆盖了我的皮肤类的函数initializationComplete,这样当连接状态改变时,我的currentState也会改变。
override protected function initializationComplete():void
{
useChromeColor = true;
BindingUtils.bindSetter(onConnectionChange,ServiceMonitor.getInstance(),'connectionStatus');
super.initializationComplete();
}
protected function onConnectionChange(value:Object):void
{
if(ServiceMonitor.getInstance().connectionStatus == 'Service.available')
currentState = 'downOnline';
else if(ServiceMonitor.getInstance().connectionStatus != 'Service.available')
currentState = 'downOffline';
}
除了初始状态覆盖我自己的组件初始化之外,这种方法很好。我通过覆盖commitProperties函数并在外观调用函数commitProperties之后调用函数onConnectionChange来解决这个问题。这是我的ButtonSkin的覆盖commitProperties函数:
override protected function commitProperties():void
{
super.commitProperties();
onConnectionChange(null);
}
由于我不知道改变currentState导致了多少处理,我担心通过多次调用onConnectionChange函数并因此多次更改currentState我会对性能产生负面影响。问题是onConnectionChange本身导致调用commitProperties。所以那里已有额外的处理。问题是有多少并且没有更好的方法。非常感谢你......
答案 0 :(得分:1)
有几点需要注意:
有更好的方法吗?也许,也许不是。它最终取决于你想要什么/需要改变多少。
如果您尝试更改的唯一内容是图标,这就是我采取的方法:
<s:ToggleButton id="pendingBtn" width="22" height="22" toolTip="View Pending"
icon="{AssetManager.pending_closed}"
icon.PendingTransactions="{AssetManager.pending_open}"
selected.PendingTransactions="true" />