我刚刚开始使用Parsley,我遇到了这个问题。问题是我的项目中有一个自定义组件,由Parsley“配置”并有一段代码如下:
<fx:Script>
<![CDATA[
...
[Inject(id="dateFormatter")]
[Bindable] public var dateFormatter:DateFormatter;
...
]]>
</fx:Script>
<fx:Declarations>
<parsley:Configure />
</fx:Declarations>
我的问题是我不希望Parsley完全配置组件。我想在MXML中使用FastInject
,而不是使用Configure
,例如:
<parsley:FastInject objectId="dateFormatter" property="dateFormatter" type="{DateFormatter}" />
根据我在网上搜索时发现的情况,objectId
中的FastInject
与[Inject(id="dateFormatter")]
相同。这是source。如果我错了,请纠正我:)。
但是当我使用它时,我遇到以下错误:
Error: More than one object of type mx.formatters::DateFormatter was registered
这是否意味着正在注入的财产的ID未被提取?当我配置整个组件并使用Inject
meta-tag
时,它工作正常,但我不想配置整个组件。
有人可以建议解决方案吗?
答案 0 :(得分:1)
如果在上下文中声明的对象具有id。
,则id的FastInject可以正常工作<fx:Declarations>
<foo:FooBar1 />
<foo:FooBar2 id="fooBar2" />
</fx:Declarations>
<fx:Declarations>
<parsley:FastInject injectionComplete="handlerInjectComplete(event)">
<parsley:Inject property="foobar1" type="{FooBar1}" />
<parsley:Inject property="foobar2" objectId="fooBar2"/>
</parsley:FastInject>
</fx:Declarations>
<fx:Script>
<![CDATA[
[Bindable]
public var foobar1:FooBar1;
[Bindable]
public var foobar2:FooBar2;
protected function handlerInjectComplete(event:Event):void
{
if(foobar1) trace("foobar1 available");
if(foobar2) trace("foobar2 available");
}
]]>
</fx:Script>
这适合我。
答案 1 :(得分:0)
Parsley FastInject在从A类继承B并想要通过id注入两者时会感到困惑,同时指定类型。
您只需要使用FastInject
的objectId / type属性之一