Apache flex Flex/mate:mate不';t缓存实例,使用对象生成器创建

Apache flex Flex/mate:mate不';t缓存实例,使用对象生成器创建,apache-flex,actionscript-3,caching,Apache Flex,Actionscript 3,Caching,如果曾经运行ObjectBuilder,则实例化的对象将被缓存,下次使用PropertyInjector或其他对象时,将使用实例化的对象,而不是创建新对象。或者至少应该是这样:) 但在下面的示例中,mate似乎再次尝试实例化对象: 出现以下错误: ! TerminalPresentationModel - constructor called # dispatcher = [object GlobalDispatcher] ! <Injectors (started) target

如果曾经运行ObjectBuilder,则实例化的对象将被缓存,下次使用PropertyInjector或其他对象时,将使用实例化的对象,而不是创建新对象。或者至少应该是这样:)

但在下面的示例中,mate似乎再次尝试实例化对象:

出现以下错误:

! TerminalPresentationModel - constructor called # dispatcher = [object GlobalDispatcher] ! 
<Injectors (started)    target="[class TerminalPresentationModel]"   includeDerivatives="false"   dispatcherType="inherit"   scope="[object Scope]">
        <PropertyInjector   sourceKey="currentDate"   targetKey="date"   source="[class DateManager]"   sourceCache="inherit"   softBinding="false"/>

---------------------------------------------------------
- ERROR: Wrong number of arguments supplied when calling the constructor 
- TARGET: TerminalPresentationModel 
- TAG: PropertyInjector 
- METHOD: constructor
- FILE: TerminalMainEventMap
- NO ARGUMENTS SUPPLIED 
- STACK TRACE: ###SHORTENED###
---------------------------------------------------------


---------------------------------------------------------
- ERROR: source is undefined in tag PropertyInjector 
- TARGET: TerminalPresentationModel 
- TAG: PropertyInjector 
- FILE: TerminalMainEventMap
---------------------------------------------------------

- INFO: Data binding will not be able to detect assignments to date
</Injectors (end)    target=[class TerminalPresentationModel]>
! DateManager - constructor called # dispatcher = [object GlobalDispatcher] !
<Injectors (started)    target="[class TerminalContainer]"   includeDerivatives="false"   dispatcherType="inherit"   scope="[object Scope]">
    <ObjectBuilder   registerTarget="true"   constructorArguments="[object GlobalDispatcher]"   cache="inherit"   generator="[class TerminalPresentationModel]"/>
    <PropertyInjector   targetKey="pm"   source="[object TerminalPresentationModel]"   sourceCache="inherit"   softBinding="false"/>
- INFO: Data binding will not be able to detect assignments to pm
</Injectors (end)    target=[class TerminalContainer]>
!TerminalPresentationModel-名为#dispatcher=[object GlobalDispatcher]的构造函数!
---------------------------------------------------------
-错误:调用构造函数时提供的参数数量错误
-目标:TerminalPresentationModel
-标记:PropertyInputor
-方法:构造函数
-文件:TerminalMineVentMap
-没有提供任何参数
-堆栈跟踪:###缩短###
---------------------------------------------------------
---------------------------------------------------------
-错误:标记PropertyInputor中未定义源
-目标:TerminalPresentationModel
-标记:PropertyInputor
-文件:TerminalMineVentMap
---------------------------------------------------------
-信息:数据绑定将无法检测到迄今为止的工作分配
! DateManager-名为#dispatcher=[object GlobalDispatcher]的构造函数!
-信息:数据绑定将无法检测到分配给pm的任务
有什么提示我的代码有什么问题吗

更新2010-08-16 根据ktutnik的要求,更多详细信息: 我使用事件图:

<?xml version="1.0" encoding="utf-8"?>
<EventMap
    >

    <fx:Script>
        <![CDATA[           
            // imports and namespaces shortened

            [Bindable]
            public var endpoint:String = "";
        ]]>
    </fx:Script>


    <fx:Declarations>
        <Debugger level="{Debugger.ALL}" />

        <myService:Services id="services" endpoint="{endpoint}"/>

        <maps:TimeEventMap endpoint="{endpoint}"/>

        <EventHandlers type="{FlexEvent.PREINITIALIZE}">
            <ObjectBuilder 
                generator="{TerminalPresentationModel}" 
                constructorArguments="{scope.dispatcher}" />
            <ObjectBuilder
                generator="{DateManager}"
                constructorArguments="{scope.dispatcher}" />
            <ObjectBuilder
                generator="{TerminalFaultHandler}" />
        </EventHandlers>

        <EventHandlers type="{DataServiceEvent.GET_CURRENT_TERMINAL_STATUS}">
            <RemoteObjectInvoker instance="{services.TerminalService}"
                 method="getCurrentTerminalStatus"
                 arguments="{[event.locationId,event.actualPlan]}"
                 showBusyCursor="false">
                <resultHandlers>
                    <MethodInvoker generator="{TerminalPresentationModel}"
                                   method="setCurrentTerminalStatus"
                                   arguments="{resultObject}" />
                    <MethodInvoker generator="{TerminalFaultHandler}"
                                   method="removeError" />
                </resultHandlers>
            </RemoteObjectInvoker>
        </EventHandlers>


        <Injectors target="{TerminalContainer}"
                   debug="true">
            <ObjectBuilder
                generator="{TerminalPresentationModel}"
                constructorArguments="{scope.dispatcher}" />
            <PropertyInjector
                targetKey="pm"
                source="{lastReturn}" />
        </Injectors>

        <Injectors target="{TerminalPresentationModel}"
                   debug="true">
            <PropertyInjector targetKey="date" source="{DateManager}" sourceKey="currentDate" />
        </Injectors>

        <Injectors target="{TerminalContent}">
            <PropertyInjector targetKey="faultHandler"
                source="{TerminalFaultHandler}" />
        </Injectors>

        <EventHandlers type="{UnhandledFaultEvent.FAULT}">
            <MethodInvoker generator="{TerminalFaultHandler}" method="handleFault" 
                           arguments="{event.fault}" />
        </EventHandlers>
    </fx:Declarations>
</EventMap>

Flex:4.0
mate:0.8.9

debug=“true”
放在EventHandlers和Injector标记中,并查看前面的哪一个。。尝试组合CreationComplete事件,而不是预先初始化。如果我在应用程序创建中没有弄错,则Complete早于Preinitialize(但我不确定..因为它也让我感到困惑)。

debug=“true”
放在EventHandler和Injector标记中,看看哪一个更早。。尝试组合CreationComplete事件,而不是预先初始化。如果我在应用程序创建中没有弄错的话,那么Complete比Preinitialize早(但我不太确定..因为我也很困惑)。

一个事件映射中似乎不能有两个ObjectBuilder。这将导致此问题。 当我在预初始化事件中删除ObjectBuilder时,一切正常

这是一种奇怪的行为,因为在其他地方,我像在这个案例中那样写了它,并且没有出现任何问题。
所以我真的不知道为什么它能工作,但它似乎解决了我的问题。

一个EventMap中不可能有两个ObjectBuilder。这将导致此问题。 当我在预初始化事件中删除ObjectBuilder时,一切正常

这是一种奇怪的行为,因为在其他地方,我像在这个案例中那样写了它,并且没有出现任何问题。
所以我真的不知道它为什么会工作,但似乎它解决了我的问题。

顺序是:调用构造函数(使用正确的调度程序)=>调用日期注入=>构建对象。它是:preinitialize->initialize->creationComplete,因此将其更改为creationComplete可能会导致更多问题。请完成您的代码,因为许多问题都可能导致此问题。。例如:EventScoping(EventMap或LocalEventMap),我不知道DateManager实例化是否正确。如果您使用MATE版本和Flex版本,则编辑它也可以帮助识别问题。顺序是:调用构造函数(使用正确的调度程序)=>调用日期注入=>生成对象。它是:preinitialize->initialize->creationComplete,因此将其更改为creationComplete可能会导致更多问题。请完成您的代码,因为许多问题都可能导致此问题。。例如:EventScoping(EventMap或LocalEventMap),我不知道DateManager实例化是否正确。如果你带上MATE版本和Flex版本,那么编辑也可以帮助识别问题。我觉得你的代码还可以。。很奇怪,我觉得你的代码还可以。。很奇怪……是的!实际上,拥有多个对象生成器并不是问题。。如果在作为PreInitialize EventHandler子级的objectbuilder上设置
cache=“global”
,会发生什么?无论如何,我投你的票,希望Nahuel看到这一点并为你提供指导。如果在ObjectBuilder上设置cache=“global”,似乎没有其他行为+谢谢你的帮助。是的!实际上,拥有多个对象生成器并不是问题。。如果在作为PreInitialize EventHandler子级的objectbuilder上设置
cache=“global”
,会发生什么?无论如何,我投你的票,希望Nahuel看到这一点并为你提供指导。如果在ObjectBuilder上设置cache=“global”,似乎没有其他行为+谢谢你的帮助。