0

我正在尝试在我的 Flex 项目中使用项目渲染器嵌入图像。

然而,图像路径是作为绑定变量传入的字符串。

我知道

<s:BitmapImage source="@Embed('/../assets/image.png')" />

因为图像是在运行时嵌入的?(有人可以澄清一下吗)

我将如何嵌入我的绑定字符串,有点像这样:

<s:BitmapImage source="@Embed('/../assets/{data.image}')" />

非常感谢

4

2 回答 2

0

我喜欢在 css 文件中嵌入图标。然后在 ItemRenderer 中,您可以设置 css 类并获取您想要的图像。

css 文件或 mxml css 块:

.icons 
{
    bender: Embed(source="/assets/bender.png");
    /* other icons */
}

在渲染器中,当您覆盖设置数据方法时:

override public function set data(value:Object):void
{
    super.data = value;

    var iconName:String = data.image;

    if ( iconName )
    {
        var cssDecl2:CSSStyleDeclaration = styleManager.getStyleDeclaration(".icons");
        var IconClass:Class = cssDecl2.getStyle( iconName );
        bmImage.source = new IconClass();
    }
}

和 bmImage 作为 id s:BitmapImage:

<s:BitmapImage id="bmImage" />
于 2013-04-17T11:08:43.467 回答
0

如果您想嵌入图像但在运行时动态找到它,我认为更好的选择是:嵌入所有可能的图像,然后动态获取对它的引用。我们通常使用这样的模式:

public class Icons {
    [Embed(source="icons/icon1.png")]
    public var icon1:Class;
    [Embed(source="icons/icon2.png")]
    public var icon2:Class;
}

然后,您可以在运行时从您的 Icons 实例中动态获取嵌入的图像。

编辑 - 自包含示例- 我将使用项目渲染器,因为我认为这就是您正在做的事情。假设data.image可以是“飞机”、“火车”或“汽车”

<s:ItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
            xmlns:s="library://ns.adobe.com/flex/spark" 
            xmlns:mx="library://ns.adobe.com/flex/mx">

    <fx:Script>
        <![CDATA[

            [Embed(source="/assets/icons/plane.png")]
            public var plane : Class;
            [Embed(source="/assets/icons/train.png")]
            public var train : Class;
            [Embed(source="/assets/icons/automobile.png")]
            public var automobile : Class;
        ]]>
    </fx:Script>

    <s:Image source="{this[data.image]}"/>

</s:ItemRenderer>

这是一个非常简单的例子,并不是最好的实现方式,但你明白了。

于 2013-04-16T19:58:33.607 回答