从ActionScript类调度事件

时间:2009-12-15 14:43:06

标签: flex

package com.services
{

        import com.asfusion.mate.events.ResponseEvent;
        import com.events.navigation.DesgManagementEvent
        import flash.events.EventDispatcher;    
        import mx.controls.Alert;

        public class UserManager extends EventDispatcher
        {

          [Bindable]
            public var addResult:String

               [Bindable]
            public var user:User

            public function UserManager()
            {
            }


            public function addUsersResult(Result:String):void {        
                addResult = Result
                //Alert.show(event.result.toString());
                Alert.show(addResult);
                backHome();
            }

            private function addUsersFault(event:ResponseEvent):void {
                Alert.show(event.faultString, "Error Executing Call");
            }


            private function backHome():void {
                this.dispatchEvent(new DesgManagementEvent(DesgManagementEvent.DES_HOME));

            } 

    }
}

我能够获得结果,但无法从自定义actionScript类调度该事件。我用谷歌搜索并获得了你需要将其添加到显示列表的反击。

任何人都可以弄清楚我哪里出错了。方法backHome根本没有被调用。

2 个答案:

答案 0 :(得分:1)

我相信你期望在事件地图中获得DesgManagementEvent,因为你没有看到它被处理,你相信bakcHome没有被调用。

正如您所说,从不在显示列表中的对象组件调度的事件将永远不会到达事件映射。您需要传递调度程序并使用它来分派事件。您可以在构造函数(第一个objectBuilder)或属性(第二个objectBuilder)中传递它。

<EventHandlers type="{FlexEvent.INITIALIZE}">
  <ObjectBuilder generator="{MyManager}" constructorArguments="{scope.dispatcher}"/>
  <ObjectBuilder generator="{MyManager2}">
    <Properties dispatcher="{scope.dispatcher}"/>
  </ObjectBuilder>
</EventHandlers>

如果你使用构造函数,那么它将如下所示:

public function MyManager(dispatcher:IEventDispatcher)
{
    this.dispatcher = dispatcher;
}

然后您将使用您的调度程序属性来分派事件:

dispatcher.dispatchEvent(new DesgManagementEvent(DesgManagementEvent.DES_HOME));

答案 1 :(得分:0)

您确定在调用addUsersResult()时收到类型字符串吗?