将Flex组件绑定到类函数

时间:2009-09-05 14:49:06

标签: flex actionscript flex3

我有几个组件,我希望根据将用户名传递给函数来启用按钮。我想动态绑定按钮上的“enabled”属性,这样如果“somethingChanged”事件触发,按钮可能会启用或禁用。

但是,我不确定在哪里解雇“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 个答案:

答案 0 :(得分: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结构中,这种类型的功能可能会更好。这基本上是创建一个单身人士。要按照您的描述实现它,您可能希望每个用户使用某种实例。但是你无法绑定到静态函数。