Pull to refresh

Comments 49

Тоже некоторое время назад учил Flex, потом понял, что Flex сильно ограниченный фреймворк, и многие вещи через него просто невозможно сделать…
А теперь учим матчасть. SDK можно отвязать через RSL. И он грузится только один раз(причем для любого домена).
Я пробовал создать RSS Reader на флеше…
В итоге оказалось, что он поддерживает буквально несколько HTML тегов, поэтому возник нереальный геморой например с тем, чтобы парсить код вставки ютуб ролика или например, чтобы отобразить анимированную GIF картинку.

Вообще отсутствие поддержки HTML не дает комфортно создавать флеш приложения с текстом.
Например, хочу сделать флешку, в которой 10 пунктов меню, кликаешь по пунку и подгружается текст этого пункта из БД.
Но как этот текст форматировать? Если, даже, стандартно тег table не поддерживает, а только после написания нескольких костылей.

ИМХО, я считаю, что форматирование текста очень важный момент, и он должен был быть реализован в фреймворке…

Там еще какие-то проблемы были, сейчас уже не припомню, помню что на форуме флешер.ру разводили руками и говорили что flex неповоротлив и что проще сразу было делать на чистом флеше + AS
Флеш (вернее базовый класс TextField, унаследованный от DisplayObject, а только он работает с текстом) не поддерживает html. То, что там есть свойство htmlText говорит лишь о том, что они сделали небольшое удобство людям, которые хотят в тексте видеть, например, функционал , и при этом не реализовывать его ручками. Это НЕ html, это реализация поддержки тега.

Я считаю, что поддержка html ни в коей мере не должна находится в ядре флеша (globalplayer.swc), если надо — делаем google:(parser+html+as3) и используем уже написанные библиотеки.

Далее, для особо продвинутого форматирования текста был создан фреймворк TextLayout (написан на чистом as3, как и флекс). Это для тех случаев, когда стандартный flash.text.* недостаточен. Однако TextLayout весит 300КБ, соотвественно ваш проект увеличится примерно на столько же в релизе, однако этот фреймворк позволяет делать с текстом такое, что html+css+js даже и не снилось.

Посути флеш — это SWF-Tags + Actionscript (abc-код в fp9 и выше). Часть из swftags можно реализовать на as(3), например тег DefineShape (в fp10 это получится DefineShape4):
var s:Shape = new Shape();
s.graphics = ....;
addChild(s);

Flex и TextLayout это лишь фреймворки, использующие as3, посему и ограничены лишь ядром флеша. Т.е если FP9 не поддерживает RTMFP, в отличие от FP10; то и flex не сможет добавить этой функциональности. А вот разметку в процентах флекс дает. Но это и не минус флеша, ибо с поддержкой процентов, как писал ниже, «Hello, word!» будет весить не 576 bytes, а раза в 4 больше, и рост будет увеличиваться пропорционально используемым DisplayObjects в коде, что не приемлемо, ИМХО.

Так что вы привели пример незнания технологий, основанных на флеше, уж извините, и клянете в этом флекс, а он тут, мягко говоря, совершенно не причем. Парсеры html на as3 есть (не говоря уже о том, что xml поддерживаетя в ядре — flash.xml.*), базовое форматирование тоже (flash.text.*), остальное дописывается ручками.
Demo — Linked Containers, Figures (выделение наклонного текста), Expressive Effects. Посмотрите демку полностью, поиграйтесь с настройкоми сверху.
Да не за что. Кстати, первый найденный из запроса в гуглю as3htmlparser (demo), поддерживает довольно много.

А флеш — это очень мощная штука, но полная картина всплывает лишь только после изучения спецификаций swf9 и выше.
ТУпо первый пришедший в голову пример: чтобы сделать компонент tabbar у которого вкладки располагаются не в одну строчку, а в две, нужно сверх круто знать флекс. Это Оооооочень не тривиальная задача, которая под силу далеко не каждому.
Вы знаете, чтобы написать что-то серьезное, надо вообще быть специалистом в области. Для написания собственного компонента НЕОБХОДИМО знать жизненный цикл, аспекты, логику фреймворка и пр. Без этого какой смысл что-то писать? ПолуНедоСпециалисты в этой жизни слабо котируются.

Если я верно понял что вы придумали, то эта задача на экран кода (при этом используя уже готовый TabBar из flex3 (а не TabNavigator)). Тут как раз даже не вижу сложности.
Как напишешь скинь в личку. Мой вариант занял 2 дня работы и пришлось написать компонент практически с нуля. mx_internal и private греют душу.
Вопервых, c чего вы решили, что я буду писать этот компонент? У меня своей работы достаточно и мое время стоит определенных денег. Вовторых на ты тут общаться не приянто незнакомым людям, ну да ладно. А в третьих, сформулируйте полное поведение вашего компонента (порядок заполнения табов (т.е как заполняются — сначала до упора первый или попеременно), кол-во элементов в табе (?) и/или пр.) и если у меня будет свободное время, я его вам отпишу.
«Вопервых, c чего вы решили, что я буду писать этот компонент?» Ты в праве сам распоряжаться своим временем и задачами. Но если звезды сойдутся и компонент будет написан, скинь в личку примеры. Мне очень интересно будет посмотреть.

«Вовторых на ты тут общаться не приянто незнакомым людям, ну да ладно.» Вообще нигде такого запрета я не видел. Обращаюсь к коллегам на ты постольку по скольку. Однако я вижу, что вам это не приятно, так-что в дальнейшем до случая знакомства буду обращаться на Вы и прошу прощения за фамильярность.

«А в третьих, сформулируйте полное поведение вашего компонента» Таб бар заполняется до упора элементами, если новая вкладка не влазит в текущую строку, создается новый ряд на N% меньше чем предидущий. Строки не меняются друг с другом местами при клике. Получается такая пирамидка с кнопочками.
блин… складывается такое чувство, что подавляющее большинство хабралюдей владеют только php… причем некоторые из них враждебно относятся к другим языкам и технологиям… это наверно потому, что для того чтобы начать программировать на php особо много скиллов не надо… там даже ООП появилось только в 5 версии… так что начать быть программистом php может любой школьник 8 класса…
а утверждать чего нельзя сделать на Flex, не умея делать хотя бы что-нибудь на Flex, я бы ни стал…
Флекс он, конечно же, сильный, мощный фремворк, но с одним существенным недостатком — слишком много весят конечные приложения (от 1МБ флекс3, от 1.7МБ флекс4). Для интрАнета — в самый раз, для интернета — тяжеловато еще, ИМХО, даже с использованием rsl.

Для такой задачи я бы выбрал чистый флеш и уложился бы на стандартных компонентах (fl.*) в 50-100 КБ.
ну не знаю у меня «Hello, word!» 279 KB.
О какой задаче вы говорите? Flex — это RIA. Flash — это графика…
о задаче, которую реализовал ТС.
«Hello, word!» — это не приложение :) Однако на флеше, только что проверил, «Hello, word!» заняло 576 bytes в релиз-версии. Разница, на сой взгляд, очевидна.
я писал такой загрузчик полгода назад без использования флекс.
это был мой первый проект на ас3. итоговый размер свф — 281 кб.
и это с подключенной библиотекой алчеми для сжатия изображений.
Ответил чуть выше. SDK отвязывается через RSL. Пишу статью дабы развеять заблуждения
Да знаю я, даже уточнил. Однако всем интересен первый клиент на приложении (у которого, скорее всего, библиотеки еще не шарены), а он не собирается ждать загрузки 10 секунд и более, он быстрее уйдет с ресурса.

Гугля проводила исследования на эту тему — как только скорость отображения их главной страницы увеличилась на что-то типа 0.7 секунды (из за каких-то js-компоненттов), они потеряли 13% трафа. Не нахожу никак пруф-линк, но рассказывала это женщина какой-то главный аналитик Гугла. С красивыми графиками и пр. И я склонен ей доверять, в моей практике такое тоже случалось, лишь из-за банального увеличения веса страницы траф падал.
Всё хорошо, но только Ваш загрузчик не уменьшает фотографии перед отправкой. В той статье ссылку на которую вы дали уменьшение идет для помещения картинки в контейнер с заданными размерами. Реальное уменьшение делается библиотеками которые перекодируют байтовый массив изображения. Есть несколько библиотек на AS3 в том числе от adobe, но у них один минус — они тормозные. Проблема тормозов решается использование adobe alchemy которая позволяет использовать компилированый код написанный на С++ и благодаря этому повысить производительность. Насколько я знаю вконтакте как раз использует alchemy.
Я делал подобный загрузчик как раз с использованием alchemy для уменьшения картинок. Посмореть можно как работает «уменьшалка» тут
Если интересно могу написать как создавать подобное. Так же могу написать о том как делать скинабельные компоненты на флэше.
Круто, конечно пишите. Я вроде давно веб-разработкой занимаюсь, но про alchemy впервые слышу, чувствую себя пещерным человеком. И то что flex-овые приложения великоваты получаются не учел. Ролик без ресайза весит 600 кб, еще сишный image_resize 180 кб.
Насколько я знаю, Alchemy просто транслирует C/C++ код в Actionscript. Ни о каком приросте производительности речи и не идет, т.к. код исполняется все той же виртуальной машиной Actionscript (AVM2).
Тут, скорее, наоборот имеет место снижение производительности, ведь вслед за самой C/C++ программой тянутся все ее include-ы.
Как я понял, назначение этой технологии — портировать существующие алгоритмы во Flash.

Вот небольшая статья про Alchemy: www.automatastudios.com/2008/11/21/understanding-adobe-alchemy/
Зачастую идет прирост, на тестах это видно, ибо Alchemy использует несколько недокументированных возможностей as3. Вот одна из них, использование которой в Alchemy дало началу Virtual Memory API в haXe.

Так что не все так просто.
Я сам делал замеры используя разные классы для кодирования изображений в сравнении с тем что дает алхимия, прирост был от 3 до 10 раз. Так что для некоторых целей alchemy очень полезна.
скорость получается за счёт работы с ByteArray. в 10м флэше появились «скрытые» операторы работы с ByteArray, которые не доступны обычным смертным, и которые очень активно используются компилятором алхимии.
поправочка: не транслирует в Actionscript, а компилирует в байткод AVM2
не вчитывался в код, но с виду поразительно похоже на WPF
не вчитывался в код, но с виду поразительно похоже на XML :)
Ну а MXML (код в статье) это расширение XML, которое позже транслируется в as3, а потом as3 компилируется в abc-код (ну то есть в .swf)
Анимированный поворот можно делать через <mx:Rotate>, не знаю, насколько это современно, да и там, кажется нет возможности работы с матрицей преобразования. Просто указывается цель target, определяются углы поворота angleFrom и angleTo и используются методы анимации play и stop.
Да, я с помощью mx:Rotate и делаю, а то, что вылезает, скрываю. Там еще есть mx:Zoom, который меняет масштаб, и конструкция <mx:Parallel> которая вроде как позволяет эти эффекты запускать одновременно. Только я это пока не победил.
Так и не нашел ссылки на само созданное приложение. Сделали бы демку как это будет выглядеть в итоге?
На Javascript скоро будет File API значительно распространён (пока только Safari 4 и Firefox 3.6), а модификацию изображений можно через Canvas делать (тот же www.pixastic.com/).
Это хорошие новости, только 6-й ослик настроение портит…
Где живьем увидеть пример вашего загрузчика? (демо)
Ну как хэллоуворлд конечно пример канает, но в продакшн я бы такое запустить постеснялся. Автор следите за слушаетлями, которых вы создаете. У вас будут очень большие проблемы с памятью, обещаю ) А потом будут очень большие проблемы у меня, когда придется отбиваться от очередного холиворщика, который ненавидит флеш за то, то тот палит проц и жрет память. Вобщим сделал addEventListener, сделай removeEventListener или хотя-бы поставь слабую ссылку, иначе по рукам. Проблемы с поворотом через матрицу трансформаций решаются библиотеками типа TweenMax, потому-что встроенные твины во флексе какие-то ущербные. Так-же неплохо было-бы вообще понять философию itemRenderer`а. Он на то и называется itemRenderer, что не работает ни с чем кроме itemData. Вообще. Т.е. вызывать что-то там из parent document это грубое нарушение инкапсуляции (по рукам да). И дергать методы itemRenderer`а из его контейнера это тоже запрещено. А вообще все круто, хороших и полезных Вам приложений. Флекс это очень интересный и многогранный фреймворк.
Спасибо за советы.

А как бы Вы сделали удаление itemRenderer-ов? Есть, к примеру, в itemRenderer кнопка «удалить» и при клике на нее нужно удалять соответствующий элемент из TileList. Ведь какое-то управление на элементах TileList хочется иметь, те же повороты, удаления, переименовать файл итд. Как правильно это программировать?

Еще совсем общий вопрос — как написать нормальное приложение на flash или flex? Нормальное в смысле целый сайт типа www.nvidia.com/object/cuda_home.html, miniusa.com/ или www.rafinadhome.ru/? Во flex есть сцены, где можно указывать, какие элементы удалить и добавить на страницу, но при большом количестве страниц невозможно не запутаться. + хочется вынести максимум параметров из swf-ника, чтобы не требовалось его компилировать при каждом изменении.

Может быть есть туториал по созданию нормального flash-сайта, подскажете? 7 лет назад, когда я вроде как выучил php, устроился на работу, и коллеги сразу прочистили мне мозги и объяснили, что я ничего не знаю, что есть MVC, и как писать сайт. Сейчас у меня похожие неясности с flash, но не устраиваться же теперь на работу, чтобы все выяснить:). И главный теоретический вопрос — в логической структуре приложения, где делать границу между тем, что должен отдавать некий xml-config и тем, что должно быть зашито в самом swf.
Удалите itemData из dataProvider. TileList обработает событие и убьет ненужный renderer.

Большие приложения обычно пишутся с использованием микроархитекруты Cairngorm. Это специально адаптированный для флекса MVC + DataBinding. С его использованием можно написать практически любое нужное вам приложение. Правда трудозатратен гад и требует большого количества в принципе ненужного кода. На каждый чих новый класс. Хороший tutorial можно найти тут www.davidtucker.net/category/cairngorm/
Кажется, я видел java-апплеты для такой задачи, но есть смысл поддерживать и флэш тоже. По опыту использования аналогичных приложений/апплетов посоветую протестировать работу сабжа на нестабильном соединении — ситуация, когда апплет наглухо заглючивает при обрыве tcp-соединения, мягко говоря, удовольствия не доставляет. Идеалом в этом отношении вижу google picasa — поставил работу на закачку, и делай дальше асинхронно что угодно — загрузка асинхронна с интерфейсом и восстанавливается после ошибок.

В текущем проекте массовую загрузку файлов мы решили проще — закачкой zip-архива. Благо, никакое изменение файлов вроде пережатия до отправки не требовалось. И нахаляву получили создание на сервере иерархии директорий, соотвествующей иерархии у пользователя.

Итого, имхо, идеал — когда поддерживается и java, и флэш, и загрузка архивом, и загрузка файлов по одному, причём в первых двух случаях загрузка асинхронна — пока загружаются файлы, можно выбрать и поставить следующие, а во вторых двух пользователю показывается progress bar на javascript, показывающий текущий прогресс загрузки в процентах.
Буду признателен за ответ!

Я добавил переменную — public var count:int;
В ней хранится общее кол-во загруженных файлов count = photos.length;
Также, вместо имени файла, я вывожу порядковый номер(добавил новое свойство num и присваиваю номер текущего элемента, отсчет веду от единицы):

private function addPhotos(e:Event):void
{
for (var i:uint = 0; i < frList.fileList.length; i++)
{
var elem:Object = {fr:FileReference(frList.fileList[i]),num:i};
elem.num = count+1;
elem.fr.load();
elem.fr.addEventListener(Event.COMPLETE,refreshThumb);
photos.addItem (elem);
}
}

В рендере вывожу номер таким образом:
<mx:Label text=«Фото №{data.num}» width=«100%» truncateToFit=«true» bottom=«0» textAlign=«center» />

Вопрос в том, что при удалении фотографии, порядковый номер не меняется. Т.е. если есть 5 фотографий и я удалю 2-ю и 3-ю, то в списке будет порядок – 1, 4, 5, а по логике, после удаления должен быть 1,2,3.

Как сделать чтобы после удаления одной фотографии список обновлялся и перерисовывался? Это нужно для того, чтобы после удаления обновлялся порядковый номер фотографии.
Only those users with full accounts are able to leave comments. Log in, please.