According to the Flex docs, siempre y cuando la propiedad es capaz de unirse, puede simplemente hacer esto (he incluido los dos botones adicionales para demostrar):
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
[Bindable]
private var currentUser:String = "Bill";
private function isUserAllowed(user:String):Boolean
{
if (user == "Bill")
{
return true;
}
return false;
}
]]>
</mx:Script>
<mx:VBox>
<mx:Button label="My Button" enabled="{isUserAllowed(currentUser)}" />
<mx:HBox>
<mx:Button label="Try Tom" click="{currentUser = 'Tom'}" />
<mx:Button label="Try Bill" click="{currentUser = 'Bill'}" />
</mx:HBox>
</mx:VBox>
</mx:Application>
Sin CurrentUser marcados [Bindable], sin embargo, se ganó no funciona
Otra forma de hacerlo, si quisiera enlazar más literalmente a la función (esto también se expresa en los documentos), sería hacer que la función responda a un evento que despache cuando el usuario actual cambie, así:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" initialize="init()">
<mx:Script>
<![CDATA[
private var _currentUser:String = "Bill";
public function set currentUser(value:String):void
{
if (_currentUser != value)
{
_currentUser = value;
dispatchEvent(new Event("userChanged"));
}
}
[Bindable(event="userChanged")]
private function isUserEnabled():Boolean
{
if (_currentUser == "Bill")
{
return true;
}
return false;
}
]]>
</mx:Script>
<mx:VBox>
<mx:Button label="My Button" enabled="{isUserEnabled()}" />
<mx:HBox>
<mx:Button label="Try Tom" click="{currentUser = 'Tom'}" />
<mx:Button label="Try Bill" click="{currentUser = 'Bill'}" />
</mx:HBox>
</mx:VBox>
</mx:Application>
Así que hay un par de maneras. OMI, el segundo parece de alguna manera más apropiado, pero definitivamente no hay nada malo con el primero. ¡Buena suerte!
No veo el sentido de pasar la variable como un parámetro a la función, ya que es global. – ForYourOwnGood
Si el parámetro no se menciona en la línea "habilitada", el enlace no se activará cuando el valor cambie; el botón no tendría forma de saber que debería volver a evaluar la condición "habilitada". –
A pesar de que funciona, este enfoque todavía se siente como un gran error para mí personalmente; parece mucho más apropiado vincularse a la función de forma explícita, en lugar de hacerlo de manera incidental a través de una variable pública "pasada" por ella. Práctica extraña. ¡Pero a cada cual lo suyo! –