Event Handlers
对事件的处理,当事件发出时运行
<EventHandlers type="{QuoteEvent.GET}" debug="true">
<RemoteObjectInvoker destination="ColdFusion" source="stockQuoteExample.QuoteService"
method="getQuote"
arguments="{event.symbol}"
debug="true">
<resultHandlers>
<MethodInvoker generator="{QuoteManager}"
method="storeQuote" arguments="{resultObject}"/>
</resultHandlers>
</RemoteObjectInvoker>
</EventHandlers>
InlineInvoker
调用本地(script block创建)、静态、单例方法
调用静态方法
<InlineInvoker method="Math.random" />
返回值是 LastReturn
本地方法
<mx:Script>
private function myMethod():void {
trace('you called me!');
}
]]>
</mx:Script>
<EventHandlers type="myEventType">
<InlineInvoker method="myMethod" />
</EventHandlers>
单例方法
<InlineInvoker method="{MySingleton.getInstance().myMethod}" />
MethodInvoker
创建generator指定类的object实例,并调用方法
<MethodInvoker
generator="ClassNameToInstantiate" method="methodToExecute"
arguments="{['argument1', 'argument2']}"/>
类似于
myWorker.methodToExecute('argument1', 'argument2');
Event Anouncer
定义事件对象并发出,按事件在文档中定义顺序执行
<EventAnnouncer type="myEventType" generator="MyEventClass">
<Properties myProperty="myValue" myProperty2="other value"/>
</EventAnnouncer>
类似于
var myEvent:MyEventClass = new MyEventClass("myEventType", true);
myEvent.myProperty = "myValue";
myEvent.myProperty2 = "other value";
dispatchEvent(myEvent);
Service Call
使用 HttpServiceInvoker WebServiceInvoker和RemoteObjectInvoker调用不同的服务。当在EventHandlers中使用这些tags时,当service请求发出后,后续的handler会立刻执行。如果希望后续handler等待service返回值再执行,将这些handlers放在service call的resultHandlers中,如:
<RemoteObjectInvoker destination="ColdFusion" source="stockQuoteExample.QuoteService"
method="getQuote"
arguments="{event.symbol}"
debug="true">
<resultHandlers>
<MethodInvoker generator="{QuoteManager}"
method="storeQuote" arguments="{resultObject}"/>
</resultHandlers>
</RemoteObjectInvoker>
result 事件处理支持 EventAnouncer和CallBack
<resultHandlers>
<CallBack method="save_result"/>
<EventAnnouncer generator="{ SearchEvent }" type="{ SearchEvent.SEARCH }"></EventAnnouncer>
</resultHandlers>
instance属性:已经创建的remoteObject对象,用于service对象的重用,如:
<services:Services id="services"destination="ColdFusion" source="someCFC" />
<RemoteObjectInvoker instance="{services }" ... >
Date Copier
在 eventHandlers中定义,用处是将数据暂时缓存,为eventhandler后边的标签使用,目标属性可以是event handler lists’s data或者外部变量,如
<DataCopier destination="data" destinationKey="someProperty" source="result" sourceKey="someProperty" />
Stop Handlers
Event handlers中内容会顺序执行,如果想提前停止,可使用这个标签,可根据最后执行的methodInvoker 或者指定判断函数,决定是否停止执行,如
<StopHandlers lastReturnEquals="someValue" /> //最后执行的值是否为someValue
<StopHandlers stopFunction="myStopSequenceFuntion" /> //停止函数
private function myStopFunction(scope:Scope):Boolean {
... here you do some evaluation to determine
whether to stop the execution of the list or not...
return false;
//or return true;
Call Back
调用发出Event的对象(如View)中的函数
<CallBack method=
"methodToCall" arguments=
"{['argument1', 'argument2']}" />
ObjectBuilder
创建对象为MethodInvoker和PropertyInjector服务,如
<ObjectBuilder generator="ClassNameToInstantiate"
constructorArguments="{['argument1','argument2']}" >
<Properties weightFactor="0.5" flatFee="3" />
</ObjectBuilder>
相当于:
var myObject:ClassNameToInstantiate = new ClassNameToInstantiate('argument1', 'argument2');
myObject.flatFee=3;
MockRemoteObject
用于模拟远程调用,同样的还有MockWebService,如
<MockRemoteObject id="contacts" mockGenerator="{ MockContactService }" delay="3">
<methods>
<MockMethod name="search" dataUrl="assets/xml/contacts.xml"/>
</methods>
</MockRemoteObject>
其他tag
LocalEventMap 主要用于module,需要传入dispatcher
AsyncMethodInvoker 用于函数的异步调用,类似于RemoteObject监听resultHandler和faultHandler
Injectors
用于business中修改数据后,反应到view中
当target中的对象创建时就会运行,即the object of that class needs to be created within the display list, or be instantiated by theObjectBuilder orMethodInvoker tags.
可包含 PropertyInjector和ListenerInjector,以及Message Handler和Event Handler包含的tag
简单实例:
<Injectors target="{ ContactList }">
<PropertyInjector targetKey="contacts" source="{ ContactsManager }" sourceKey="contacts"/>
</Injectors>
包含MethodInvoker和ObjectBuilder
<Injectors target="{ ContactForm }">
<MethodInvoker generator="{ ContactsManager }" method="getCurrentContact" />
<ObjectBuilder generator="{ ContactFormresentationModel }" cache="none"
constructorArguments="{ [ scope.dispatcher, lastReturn ] }" />
<PropertyInjector targetKey="model" source="{ lastReturn }"/>
</Injectors>
PropertyInjector
sourceKey只要有get方法即可
如果是变量,只要指定source即可
可以为target注入多个属性
<Injectors target="{PhotoViewAdapter}">
<PropertyInjector source="{PhotoManager}" .. />
<PropertyInjector source="{UserManager}" ... />
<PropertyInjector source="{AlbumManager}" ... />
</Injectors>
ListenerInjector
位于Injectors中,监听type指定的事件,并运行 Injectors target代表的类的函数
<Injectors target="{ ContactFormPresentationModel }">
<ListenerInjector eventType="{ ContactEvent.SAVED }" method="contactSaved" />
</Injectors>
Message Handlers
用于flex中message处理的简化,在多客户端通信的场景上用到,所以可以使用这它们制作出多人交互的应用,如即时聊天,多人对战,实时会议等。
有Producer和Consumer,客户端向服务器订阅消息,当服务器消息发生变化后,订阅了该消息的客户端会取得更新数据即时更新
当flex messaging service发送消息时执行,可以调用MethodInvoker EventAnnouncer等。
<MessageHandlers destination="YourGateway">
<MethodInvoker>
<Call back> 等
</MessageHandlers>