Как я могу динамически загружать изображения в виде значков в TileList с помощью flex?

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

<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 и чего-то вроде «Вставить (/url/to/img.jpg)». Я обещаю вам, что если вы дадите мне один из этих примеров (используя статическое изображение), я дам вам отрицательный голос. Я ИЩУ НЕ ЭТО ЗДЕСЬ!


person aarona    schedule 12.02.2009    source источник


Ответы (1)


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

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

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

person erikprice    schedule 12.02.2009
comment
Привет, Эрик, большое спасибо !! Я новичок в гибкости, поэтому изучение фреймворка - мое главное препятствие. И я привык к тому, что люди по имени Вишну или Сандип (обобщение… я шучу) отвечают на мои технические вопросы на других сайтах с бесполезной информацией или просто повторяют то, что я сказал в моем исходном посте. - person aarona; 12.02.2009