加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Mate(二)——常用tag

发布时间:2020-12-15 04:52:04 所属栏目:百科 来源:网络整理
导读:Event? Handlers ???????? 对事件的处理,当事件发出时运行 EventHandlers type="{QuoteEvent.GET}" debug="true" RemoteObjectInvoker destination="ColdFusion" source="stockQuoteExample.QuoteService" method="getQuote" arguments="{event.symbol}" de

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? WebServiceInvokerRemoteObjectInvoker调用不同的服务。当在EventHandlers中使用这些tags时,当service请求发出后,后续的handler会立刻执行。如果希望后续handler等待service返回值再执行,将这些handlers放在service callresultHandlers中,如:

<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

???????? 创建对象为MethodInvokerPropertyInjector服务,如

<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监听resultHandlerfaultHandler

Injectors

??????用于business中修改数据后,反应到view

????? 当target中的对象创建时就会运行,即the object of that class needs to be created within the display list,or be instantiated by theObjectBuilder orMethodInvoker tags.

??????? 可包含 PropertyInjectorListenerInjector,以及Message HandlerEvent 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

???????? 用于flexmessage处理的简化,在多客户端通信的场景上用到,所以可以使用这它们制作出多人交互的应用,如即时聊天,多人对战,实时会议等。

???????? 有ProducerConsumer,客户端向服务器订阅消息,当服务器消息发生变化后,订阅了该消息的客户端会取得更新数据即时更新

???????? flex messaging service发送消息时执行,可以调用MethodInvoker? EventAnnouncer等。

<MessageHandlers destination="YourGateway">
   <MethodInvoker>
   <Call back> 等
</MessageHandlers>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读