Apache flex Flex/mate:mate不';t缓存实例,使用对象生成器创建
如果曾经运行ObjectBuilder,则实例化的对象将被缓存,下次使用PropertyInjector或其他对象时,将使用实例化的对象,而不是创建新对象。或者至少应该是这样:) 但在下面的示例中,mate似乎再次尝试实例化对象: 出现以下错误: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
! 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”,似乎没有其他行为+谢谢你的帮助。