Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   source для BitmapImage (http://www.flasher.ru/forum/showthread.php?t=168447)

maksimov 20.09.2011 23:19

source для BitmapImage
 
Условие:
Значением source у BitmapImage, является Bindable'овая переменная типа String, которая может быть либо равна "", либо пути к изображению. В первом случае BitmapImage послушно ничего не делает, во втором - загружает и отображает изображение.

Задача:
Добавлять на конец пути к изображению, ещё несколько символов(к примеру:"=s100"). Но добавлять их только в том случае, если строка не пустая(иначе BitmapImage будет считать этот "хвостик" - путём к картинке, и пытаться её загрузить).


Я, пока что нашёл только вот такой вариант:

Код AS3:

<s:BitmapImage id="myImage"
                x="20" y="20" width="100" height="100"
                horizontalAlign="center"
                verticalAlign="middle"
                scaleMode="letterbox"
                smooth="true"
                smoothingQuality="high"
                source="{image}{(image!='')?'=s100':''}"/>

Насколько сей вариант "кошерный", или возможно есть какие-то более грамотные подходы?

Astraport 20.09.2011 23:38

Если это работает, то лучше заняться чем-то более полезным чем поиск кошерных вариантов.
Тоже самое можно написать в AS3, но зачем...

Dimitry_II 20.09.2011 23:42

И это работает? С двумя фигурными скобками?
Что-то кажется, что правильнее было бы во всех смыслах поместить туда вызов функции, которая будет возвращать строку (или null).

maksimov 21.09.2011 12:00

Цитата:

Сообщение от Astraport (Сообщение 1033030)
Если это работает, то лучше заняться чем-то более полезным чем поиск кошерных вариантов.

Ну... даже самый большой проект, состоит из мааааленьких "кирпичиков". И если эти "кирпичики" некачественные, то и ожидать качественного функционирования от проекта не приходится.

Если вот так, "на авось", оставлять сомнительные решения, то вскоре код превратиться в помойку... =(


Цитата:

Сообщение от Dimitry_II (Сообщение 1033032)
И это работает? С двумя фигурными скобками?

Вроде да. Когда писал - сам сомневался, что так можно. =)


Цитата:

Сообщение от Dimitry_II (Сообщение 1033032)
Что-то кажется, что правильнее было бы во всех смыслах поместить туда вызов функции, которая будет возвращать строку (или null).

То же так думаю. Но как это реализовать - что-то не соображу.

Dimitry_II 21.09.2011 12:53

А что сложного? - Первое - должна возвращать String (null или строку), второе - в качестве параметра ОБЯЗАТЕЛЬНО должен быть биндовый параметр (тот же image).

aux 22.09.2011 02:28

а через Loader\URLLoader не пробовали?

Silicium 22.09.2011 10:50

Как-то не понятно, как эта конструкция с двумя фигурными скобками вообще работает... Откуда ты взял такой вариант? Там есть объяснение?

maksimov 22.09.2011 14:00

Цитата:

Сообщение от Dimitry_II (Сообщение 1033171)
А что сложного? - Первое - должна возвращать String (null или строку), второе - в качестве параметра ОБЯЗАТЕЛЬНО должен быть биндовый параметр (тот же image).

Спасибо, сработало! =) Я как то даже и не подумал, что "биндовость" параметра "пробивает прямо сквозь функцию".


Цитата:

Сообщение от Silicium (Сообщение 1033625)
Как-то не понятно, как эта конструкция с двумя фигурными скобками вообще работает...

"Сам в шоке." =) Когда писал - сам не был уверен, что mxml это "съест".


Цитата:

Сообщение от Silicium (Сообщение 1033625)
Откуда ты взял такой вариант? Там есть объяснение?

Можно смело считать это "моим личным изобретением". =))))




Теперь осталось понять, какой вариант правильнее:

Вариант 1.
Код AS3:

[Bindable]
public var image:String
...
<s:BitmapImage id="myImage"
                x="20" y="20" width="100" height="100"
                horizontalAlign="center"
                verticalAlign="middle"
                scaleMode="letterbox"
                smooth="true"
                smoothingQuality="high"
                source="{image}{(image!='')?'=s100':''}"/>

Вариант 2.
Код AS3:

[Bindable]
public var image:String
public function i(value:String, arg:String):String
{
        if (value && value != "")
        {
                return value + arg;
        }
        return null;
}
...
<s:BitmapImage id="myImage"
                x="20" y="20" width="100" height="100"
                horizontalAlign="center"
                verticalAlign="middle"
                scaleMode="letterbox"
                smooth="true"
                smoothingQuality="high"
                source="{i(image, '=s100')}"/>



Часовой пояс GMT +4, время: 22:07.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.