0

我最近刚开始使用 Parsley,遇到了这个问题。问题是我的项目中有一个自定义组件,它由 Parsley “配置”,并且有一段代码如下:

<fx:Script>
<![CDATA[
            ...
            [Inject(id="dateFormatter")]
            [Bindable] public var dateFormatter:DateFormatter;
            ...
]]>
</fx:Script>

<fx:Declarations>
<parsley:Configure />
</fx:Declarations>

我的问题是我不希望 Parsley 完全配置组件。我想简单地FastInject在 MXML 中使用,而不是使用Configure,例如:

<parsley:FastInject objectId="dateFormatter" property="dateFormatter" type="{DateFormatter}" />

从我在网上搜索时发现,objectIdinFastInject[Inject(id="dateFormatter")]. 这是它的来源。如果我错了,请纠正我:)。

但是当我使用它时,我遇到了以下错误: Error: More than one object of type mx.formatters::DateFormatter was registered

这是否意味着被注入的属性的 ID 没有被拾取?当我配置整个组件并使用 时,它工作正常Inject meta-tag,但我不想配置整个组件。

有人可以提出解决方案吗?

4

2 回答 2

1

如果在上下文中声明的对象具有 id,则通过 id 进行快速注入有效。

上下文配置

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

这对我有用。

于 2013-04-04T09:54:58.107 回答
0

Parsley FastInject 当你从类 A 继承 B 并希望通过 id 注入两者时会感到困惑,同时指定类型。

您只需要使用 FastInject 的 objectId / type 属性之一

于 2013-11-19T09:31:10.027 回答