1

好的,所以我创建了一个自定义渲染:

<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml"
  horizontalAlign="center"
  verticalAlign="middle"
  width="100"
  height="100">
  <mx:Script>
    <![CDATA[
      [Bindable]
      private var fileLabel:String;

      [Bindable]
      private var fileIcon:Class;

      override public function set data(value:Object):void{
        fileLabel = value.label;
        fileIcon = value.file.url;
      }
    ]]>
  </mx:Script>
  <mx:Image source="{fileIcon}" />
  <mx:Label text="{fileLabel}" />
</mx:VBox>

我想将其用于包含拖放到 TileList 上的图像的照片库。我有那部分,但我似乎无法让图标工作。

给定: value 是 File 类的一种包装器。我想将 mx:Image 源设置为需要为 Class 类型的东西。使用 nativePath 或 url 会给我一个转换错误。我在网上看到了大量使用 XML 和“嵌入(/url/to/img.jpg)”之类的示例。我向您保证,如果您给我其中一个示例(使用静态图像),我会给您投反对票。这不是我在这里寻找的!

4

1 回答 1

6

这不起作用的原因是fileIcon属性的类型是Class. Class如果您打算像工厂一样使用它,通常只需要一个类型的对象,并用它创建该类的实例。当您使用[Embed]元数据时,您是在向编译器指示它应该将指定的资产嵌入到 SWF 中,并生成一个Class作为工厂来销售可以表示该资产的对象实例。但是,正如您在发布此问题之前已经发现的那样,问题[Embed]在于您需要对引用进行硬编码,它不允许您在运行时提供值(因为编译器需要在编译时逐字嵌入资产-时间)。

幸运的是,mx:Image.source它是一个非常灵活的属性,它也接受字符串(尽管大多数文档都演示了将它与嵌入式资产一起使用)。只要 Flex 应用程序能够加载资产,您就可以提供一个字符串类型的 URL 作为source.

将类型更改为fileIcon字符串,并验证它value.file.url实际上是您的应用程序可以加载的图像的 URL。(您可以通过将此 URL 硬编码到mx:Image'source属性中来进行测试。)

于 2009-02-12T03:17:21.237 回答