我最近改为Mate作为flex的框架.但是我遇到了一些问题.我想知道如何从通过methodInvoker标记生成的类中调度事件.
<resultHandlers>
<MethodInvoker generator="{LoginSuccess}" method="setCurrentUser" arguments="{[resultObject]}"/>
Run Code Online (Sandbox Code Playgroud)
然后在课堂上我想发一个活动.
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));
}
}
Run Code Online (Sandbox Code Playgroud)
问题是我似乎无法在eventMap中甚至在应用程序根目录中捕获事件.
如果有人对Mate有任何经验,我会感激一些指点.也许我这样做是错的.我只想从服务器获得结果 - 查看结果并根据结果再次联系服务器.应该很简单.
活动地图:
<resultHandlers>
<MethodInvoker generator="{LoginSuccess}" method="setCurrentUser" arguments="{[resultObject]}"/>
<ServiceResponseAnnouncer type="result"/>
</resultHandlers>
<faultHandlers>
<ServiceResponseAnnouncer type="fault"/>
</faultHandlers>
</RemoteObjectInvoker>
Run Code Online (Sandbox Code Playgroud)
通常采用的方法是将事件映射的调度程序注入对象:
<MethodInvoker generator="{MyClass}" method="someMethod" arguments="{[a, b]}">
<Properties dispatcher="{scope.dispatcher}"/>
</MethodInvoker>
Run Code Online (Sandbox Code Playgroud)
内部Properties标记设置由正在创建的对象MethodInvoker的属性,并且保证在调用方法之前设置属性.
该类显然需要有一个名为dispatcher(或任何你喜欢的名称)的公共属性才能使其工作.在事件映射调用中调度要侦听的事件dispatcher.dispatchEvent(...).
如果由the创建的对象MethodInvoker将被多次使用,如果它是一个管理器,比如说,常见的习惯用法是使用ObjectBuilder一个事件处理程序块来创建它,该块由FlexEvent.INITIALIZE以下内容触发:
<EventHandlers type="{FlexEvent.INITIALIZE}">
<ObjectBuilder generator="{MyClass}" constructorArguments="{scope.dispatcher}"/>
</EventHandlers>
Run Code Online (Sandbox Code Playgroud)
在此示例中,事件调度程序作为构造函数参数注入,但您可以像使用内部Properties标记一样使用MethodInvoker.
| 归档时间: |
|
| 查看次数: |
4087 次 |
| 最近记录: |