Domanda

Sto sviluppando un'applicazione in Flex utilizzando la libreria del modulo Cairngorm e prezzemolo.

Documentazione di prezzemolo Capitolo 5 dice: "Gli intercettori possono essere utili quando si desidera decidere se il messaggio deve essere passato o meno ai gestori".

Quando si utilizza il modulo MODULEMESSAGEINTERCETTORE quanto sopra non è vero.Il che significa che il mio messaggio ha ricevuto il messaggio prima del message intercettore.

Qualcuno conosce un lavoro in giro?

Saluti,

fadi

È stato utile?

Soluzione

La soluzione a questo problema si stava estendendo la classe ModuleMessage Interceptor come segue:

package fr.core.patch.cairngorm
{
    import com.adobe.cairngorm.module.ModuleIdMetadata;
    import com.adobe.cairngorm.module.ModuleMessageDispatcher;
    import com.adobe.cairngorm.module.ModuleMessageInterceptor;
    import com.adobe.cairngorm.module.ParsleyModuleMessage;

    import flash.system.ApplicationDomain;

    import org.spicefactory.lib.reflect.ClassInfo;
    import org.spicefactory.lib.reflect.Property;
    import org.spicefactory.parsley.core.registry.ObjectDefinitionRegistry;
    import org.spicefactory.parsley.core.registry.RootObjectDefinition;
    import org.spicefactory.parsley.tag.messaging.MessageHandlerDecorator;
    import org.spicefactory.parsley.tag.messaging.MessageInterceptorDecorator;

    public class ATPModuleMessageInterceptor extends ModuleMessageInterceptor
    {
        public function ATPModuleMessageInterceptor()
        {
            super();
        }

        public var order:int;

        private var target:Property;

        override public function process(registry:ObjectDefinitionRegistry):void
        {
            target=getModuleIdTargetProperty(registry.domain);

            var interceptor:MessageInterceptorDecorator=new MessageInterceptorDecorator();
            interceptor.type=type;
            interceptor.selector=selector;
            interceptor.method="interceptModuleMessage";
            interceptor.order = order;

            var messageHandler:MessageHandlerDecorator=new MessageHandlerDecorator();
            messageHandler.type=ParsleyModuleMessage;
            messageHandler.method="parsleyModuleMessageHandler";

            var definition:RootObjectDefinition=registry.builders.forRootDefinition(ModuleMessageDispatcher).decorators([interceptor, messageHandler]).buildAndRegister();

            definition.constructorArgs.addValue(target);

            if (moduleRef)
            {
                definition.constructorArgs.addIdReference(moduleRef);
            }
        }

        private function getModuleIdTargetProperty(domain:ApplicationDomain):Property
        {
            var props:Array=ClassInfo.forClass(type, domain).getProperties();

            for each (var prop:Property in props)
            {
                if (prop.hasMetadata(ModuleIdMetadata))
                {
                    return prop;
                }
            }

            return null;
        }
    }
}
.

Facendo quanto sopra abbiamo aggiunto la proprietà dell'ordine al modulemessage intercettore che risolve il problema che ho avuto.

Saluti,

Fadi Mansour

Altri suggerimenti

In prezzemolo 2.4, Message Intercettori sono stati deprafizzati:

E modulemessageinterceptor non è una cosa prezzemolo, è una cosa di Cairngorm.Personalmente, starei lontano da Cairngorm del tutto a causa della mia esperienza con esso.Dopo aver cercato online, ho visto questo altre persone avevano problemi simili .La soluzione migliore è pubblicare sullo stesso forum e sperare che qualcuno aiuta.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top