Question

Je développe une application dans FLEX à l'aide de la bibliothèque et du persil Cairngorm Module.

Parsley Documentation Le chapitre 5 dit: "Les intercepteurs peuvent être utiles lorsque vous souhaitez décider si le message doit être transmis ou non aux gestionnaires".

Lorsque vous utilisez le moduleMessageInterceptor, ce qui précède n'est pas vrai. Ce qui signifie que mon message Message reçoit le message avant le Message Interceptor.

Est-ce que quelqu'un connaît un travail?

Salutations,

Fadi

Était-ce utile?

La solution

La solution à ce problème consistait à étendre la classe ModuleMessageInterceptor comme suit:

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;
        }
    }
}

En faisant ce qui précède, nous avons ajouté la propriété de commande au moduleMessageInterceptor qui résout le problème que j'avais.

Salutations,

Fadi Mansour

Autres conseils

Dans Parsley 2.4, les Messages Interceptors ont été dépacés:

Et ModuleMessageInterceptor n'est pas une chose de persil, c'est une chose de Cairngorm. Personnellement, je resterais à l'écart de Cairngorm à cause de mon expérience avec elle. Après avoir regardé en ligne, j'ai vu ça D'autres personnes avaient des problèmes similaires. Votre meilleur pari est de publier sur le même forum et espère que quelqu'un aide.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top