Flex - Mate框架 - 调度事件

时间:2009-01-27 01:48:23

标签: flex mate

我最近改为Mate作为flex的框架。但是我遇到了一些问题。 我想知道如何从通过methodInvoker标记生成的类中调度事件。

<resultHandlers>
        <MethodInvoker generator="{LoginSuccess}" method="setCurrentUser" arguments="{[resultObject]}"/>

然后在课堂上我想发一个活动。

public function setCurrentUser(calUser:Object):void{
        if(calUser != null){
            Model.instance.currentUser = calUser as CalUser;
            loadOnlineCalendars(Model.instance.currentUser);
        }
    }

    public function loadOnlineCalendars(calUser:CalUser):void{
        for(var i:int = 0 ; i<calUser.calConnectors.length; i++){//logic here
            dispatchEvent(new CalConnectorEvent(calUser.calConnectors as CalConnector,CalConnectorEvent.LOAD_ONLINE_CALENDAR_EVENT,true));
        }
    }

问题是我似乎无法在eventMap中甚至在应用程序根目录中捕获事件。

如果有人对Mate有任何经验,我会很感激。也许我这样做是错的。 我只想从服务器获取结果 - 查看结果并根据结果再次联系服务器。应该很简单。

活动地图:  

            <resultHandlers>
            <MethodInvoker generator="{LoginSuccess}" method="setCurrentUser" arguments="{[resultObject]}"/>
            <ServiceResponseAnnouncer type="result"/>

            </resultHandlers>
            <faultHandlers>
            <ServiceResponseAnnouncer type="fault"/>

            </faultHandlers>
    </RemoteObjectInvoker>

                                                                                                      

3 个答案:

答案 0 :(得分:7)

通常采用的方法是将事件映射的调度程序注入对象:

<MethodInvoker generator="{MyClass}" method="someMethod" arguments="{[a, b]}">
  <Properties dispatcher="{scope.dispatcher}"/>
</MethodInvoker>

内部Properties标记设置由MethodInvoker创建的对象的属性,并且保证在调用方法之前设置属性。

该类显然需要有一个名为dispatcher的公共属性(或您喜欢的任何名称)才能使其工作。要在事件地图调用dispatcher.dispatchEvent(...)中调度您要收听的事件。

如果MethodInvoker创建的对象将被多次使用,如果它是一个管理者,比如说,使用ObjectBuilder创建它的常用习惯用法是一个被触发的事件处理程序块FlexEvent.INITIALIZE

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

在此示例中,事件调度程序作为构造函数参数注入,但您可以使用内部Properties标记,就像使用MethodInvoker一样。

答案 1 :(得分:4)

经过一些挖掘here后,我发现你无法从非视图类调用事件。该论坛帖子描述了优雅的解决方案,并提供了一个快速的解决方法:

Application.application.dispatchEvent(new CalConnectorEvent(calUser.calConnectors as CalConnector,CalConnectorEvent.LOAD_ONLINE_CALENDAR_EVENT,true));

但是查看论坛帖子 - 那里有很多肉。

答案 2 :(得分:0)

从动作脚本中的类可以调度事件。为此,它必须扩展EventDispatcher类或使用一些dispatcher属性并实现IEventInterface。但这不是正确的方法,因为事件不会冒泡,因为冒泡是特定于显示对象的属性。您可以在目标阶段收听课程中的事件。如果您希望其他节点收听该事件,则必须冒泡。所以当Theo回答你必须将配偶框架的调度员传递给班级。现在您可以从课程中调度该事件。这可能是从数据类调度事件的最佳方法。有关详细信息,请参阅此链接http://www.developria.com/2010/05/pass-the-eventdispatcher-pleas.html