Apache flex Flex嵌入路径基于绑定变量的图像

Apache flex Flex嵌入路径基于绑定变量的图像,apache-flex,Apache Flex,我正在尝试在Flex项目中使用项目渲染器嵌入图像 但是,图像路径是作为绑定变量传入的字符串 我知道 <s:BitmapImage source="@Embed('/../assets/image.png')" /> 因为映像是在运行时嵌入的,所以可以工作吗?(有人能澄清一下吗) 如何嵌入绑定字符串,有点像这样: <s:BitmapImage source="@Embed('/../assets/{data.image}')" /> public class Ico

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

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

我知道

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

因为映像是在运行时嵌入的,所以可以工作吗?(有人能澄清一下吗)

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

<s:BitmapImage source="@Embed('/../assets/{data.image}')" />
public class Icons {
    [Embed(source="icons/icon1.png")]
    public var icon1:Class;
    [Embed(source="icons/icon2.png")]
    public var icon2:Class;
}


非常感谢

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

<s:BitmapImage source="@Embed('/../assets/{data.image}')" />
public class Icons {
    [Embed(source="icons/icon1.png")]
    public var icon1:Class;
    [Embed(source="icons/icon2.png")]
    public var icon2:Class;
}
然后,您可以在运行时从Icons实例中动态获取嵌入的图像

编辑-自包含示例-我将使用项目渲染器,因为我认为这就是您要做的。 让我们假设
数据。图像可以是“飞机”、“火车”或“汽车”

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


这是一个非常简单的示例,并不是最好的实现方法,但您可以理解。

我喜欢在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" />


第一个具有静态(非变量)路径的示例之所以有效,是因为它是在编译时完成的,而不是在运行时完成的。要嵌入某个内容,必须在编译时知道该对象的路径,才能将其物理地包含在已编译的SWF中。如果路径在编译时未知,则无法嵌入它。我会给出这个答案,但由于可以在运行时动态生成Actionscript字节码,可能有人有一种巧妙的方法来完成您所寻找的任务。如果直到运行时才知道路径,并且可能有许多可能的映像,我不认为嵌入是一种好方法:)这会让人印象深刻,但肯定是一种用于动态查找图像路径的高压方法。在我的研究中,我看到过一些看起来有点相似的代码片段-您能否进一步说明这是如何工作的?当然-假设您实现了Icons类a Singleton。看起来您正在将模型对象中的图像名称存储在“图像”属性中。比如说,不必将“image”设置为icon1.png,只需将其设置为icon1。然后你可以做一些类似于
的事情,这有意义吗?我通过使item renderer视图基于一个实例化新图标实例的类来工作。然后我调用{icons[data.image]}(其中icons是我的var的名称)。您使用getInstance的实现出现错误-它不知道图标是什么等。虽然它可以工作,但我有两个警告:“数据绑定将无法检测到对“图标”的分配,并且“数据绑定将无法检测到使用方括号运算符时的更改。对于数组,请使用”因为我还是个新手,所以我仍然有点不确定我是如何得到结果的。。谢谢