2009-09-05 45 views
2

我有幾個組件,我希望通過將用戶名傳遞給函數來啓用按鈕。我想動態綁定按鈕上的「enabled」屬性,以便如果「somethingChanged」事件觸發,可能會啓用或禁用按鈕。將Flex組件綁定到類函數

但是,我不確定在哪裏觸發「somethingChanged」事件。我可能需要從應用程序中的多個地方觸發「somethingChanged」事件。這是可能的綁定靜態函數?

我是以正確的方式去做還是有更好的解決方案?

EventManager.as

public class EventManager():void 
{ 
    [Bindable(event="somethingChanged")] 
    public static function hasAccess(myVal:String):Boolean 
    { 
    } 
} 

testform1.mxml

<s:Button id="testButton1" enabled="{EventFunction.hasAccess("john")}" /> 
<s:Button id="testButton2" enabled="{EventFunction.hasAccess("mary")}" /> 
<s:Button id="testButton3" enabled="{EventFunction.hasAccess("beth")}" /> 

testform2.mxml

<s:Button id="testButton4" enabled="{EventFunction.hasAccess("tom")}" /> 
<s:Button id="testButton5" enabled="{EventFunction.hasAccess("bill")}" /> 
<s:Button id="testButton6" enabled="{EventFunction.hasAccess("jerry")}" /> 

回答

1

這樣的事情會起作用。

package 
{ 
    import flash.events.Event; 
    import flash.events.EventDispatcher; 

    public class EventManager extends EventDispatcher 
    { 
     [Bindable(event="somethingChanged")] 
     public var hasAccess:Boolean = true; 

     public static var instance:EventManager = new EventManager(); 

     public static function setHasAccess(hasAccess:Boolean):void 
     { 
      instance.hasAccess = hasAccess; 
      instance.dispatchEvent(new Event("somethingChanged")); 
     } 
    } 
} 

這會像這樣使用:

<?xml version='1.0' encoding='UTF-8'?> 
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
     xmlns:s="library://ns.adobe.com/flex/spark" 
     xmlns:mx="library://ns.adobe.com/flex/halo"> 

    <fx:Script> 
     <![CDATA[ 

      protected function button1_clickHandler(event:MouseEvent):void 
      { 
       EventManager.setHasAccess(false); 
      } 

     ]]> 
    </fx:Script> 

    <mx:Button click="button1_clickHandler(event)" enabled="{EventManager.instance.hasAccess}"/> 
</s:Application> 

我不知道這種方法是一個很好的一個。這種類型的功能在適當的MVC結構內可能會更好。這基本上是創建一個單身人士。爲了按照你所描述的來實現它,你可能需要每個用戶使用某種實例。儘管如此,你不能綁定到靜態函數。

+0

這種方法可行,但我會在這裏避免Singleton模式。只需創建一個擴展EventDispatcher的類並將其聲明爲需要設置的組件的公共變量。 –

+0

我同意單身人士。 –

+1

您不需要在屬性上指定綁定事件,只需在setter上指定即可。 – sharvey