我最近改为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>
答案 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