Как можно динамически загружать изображения в виде значков в TileList с помощью flex? - PullRequest
1 голос
/ 12 февраля 2009

Хорошо, у меня есть пользовательский рендер, который я создал:

<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. У меня есть эта часть, но я не могу заставить работать иконку.

Дано: значение является своего рода оболочкой для класса File. Я хочу установить источник mx: Image для чего-то, что должно быть типа Class. Использование nativePath или URL дает мне ошибку приведения. Я вижу множество примеров в Интернете с использованием XML и что-то вроде «Embed (/url/to/img.jpg)». Я обещаю вам, что если вы приведете мне один из этих примеров (используя статическое изображение), я проголосую за вас. ЭТО НЕ ТО, ЧТО Я ИЩУ ЗДЕСЬ!

1 Ответ

6 голосов
/ 12 февраля 2009

Причина, по которой это не работает, заключается в том, что тип свойства fileIcon равен Class. Как правило, вы бы хотели получить объект типа Class, только если вы планируете использовать его как фабрику, создавая экземпляры этого класса вместе с ним. Когда вы используете метаданные [Embed], вы указываете компилятору, что он должен встроить указанный актив в SWF, а также генерировать Class, чтобы действовать как фабрика для экземпляров торговых объектов, которые могут представлять этот актив. Однако, как вы уже обнаружили до публикации этого вопроса, проблема с [Embed] заключается в том, что вам нужно жестко кодировать ссылку, она не позволяет вам указывать значение во время выполнения (поскольку компилятору нужно буквально встраивать ресурс , во время компиляции).

К счастью, mx:Image.source - это очень гибкое свойство, которое также принимает строки (несмотря на то, что большая часть документации демонстрирует использование его со встроенными ресурсами). Пока приложение Flex способно загружать ресурс, вы можете просто указать строковый URL-адрес как source.

Измените тип fileIcon на String, а также убедитесь, что value.file.url на самом деле является URL-адресом изображения, которое может загрузить ваше приложение. (Вы можете проверить это, просто указав этот URL-адрес в атрибуте mx:Image source.)

...