Flex и RIA блоги



2007-05-29

12:54:00, Flex 2 & Co
Flex 2.0.1 Hotfix 2
Flex 2.0.1 Hotfix 2. Исправлено:

- ошибки в работе Flex Builder и Flex debugger под Flash Player 9 (9.0.45.0) в Мозилле.

- добавлена поддержка ASDoc для Linux, исправлены ошибки запуска ASDoc под Mac и Linux.

- Утечки памяти в Accordion и ViewStack

- RTE из ListBase при клике на датагриде, ошибки неправильного горизонтального скролирования датагрида при скрытии/отображении последней колонки.

- Ошибки твинига дерева при отображении скроллбаров и ошибки отображения данных при удалении нода.

- Изменение compc для использования SourceList.

- Атрибут uri для тега в catalog.xml теперь опционален.

- Пофиксены LineStyle2 и ButtonRecord2.

- unscaledWidth/unscaledHeight теперь public и read/write.

- Нажатие на полосу прокрутки не работает, если она заскинована

- Удален ExcludeClass metadata из AbstractWebService.

Установка стандартная: забэкапить старый SDK и перезаписать на старый новый.

12:54:00, Flex 2 & Co
Flex 2.0.1 Hotfix 2
Flex 2.0.1 Hotfix 2. Исправлено:

- ошибки в работе Flex Builder и Flex debugger под Flash Player 9 (9.0.45.0) в Мозилле.

- добавлена поддержка ASDoc для Linux, исправлены ошибки запуска ASDoc под Mac и Linux.

- Утечки памяти в Accordion и ViewStack

- RTE из ListBase при клике на датагриде, ошибки неправильного горизонтального скролирования датагрида при скрытии/отображении последней колонки.

- Ошибки твинига дерева при отображении скроллбаров и ошибки отображения данных при удалении нода.

- Изменение compc для использования SourceList.

- Атрибут uri для тега в catalog.xml теперь опционален.

- Пофиксены LineStyle2 и ButtonRecord2.

- unscaledWidth/unscaledHeight теперь public и read/write.

- Нажатие на полосу прокрутки не работает, если она заскинована

- Удален ExcludeClass metadata из AbstractWebService.

Установка стандартная: забэкапить старый SDK и перезаписать на старый новый.

2007-05-25

10:24:00, Flex 2 & Co
Класс Tweener
Открыл для себя класс Tweener, с помощью которого можно легко создавать программную анимацию и различные эффекты. Он реализован как для AS2, так и для AS3, при этом код менять не надо.
С помощью этого класса и Papervision3d создан прикольный каталог для ITunes.

Вот небольшой пример кода:

Tweener.addTween(UITarget, {x:selectedGoTo.x, y:selectedGoTo.y, z:selectedGoTo.z-bounceAmount+UISpacing, rotationX:0, rotationY:180, rotationZ:0, time:primeTransTime, transition:transEquation});

Прикольно то, что твининг можно задавать в трех измерениях, а также вращать элемент вокруг своих осей.

10:24:00, Flex 2 & Co
Класс Tweener
Открыл для себя класс Tweener, с помощью которого можно легко создавать программную анимацию и различные эффекты. Он реализован как для AS2, так и для AS3, при этом код менять не надо.
С помощью этого класса и Papervision3d создан прикольный каталог для ITunes.

Вот небольшой пример кода:

Tweener.addTween(UITarget, {x:selectedGoTo.x, y:selectedGoTo.y, z:selectedGoTo.z-bounceAmount+UISpacing, rotationX:0, rotationY:180, rotationZ:0, time:primeTransTime, transition:transEquation});

Прикольно то, что твининг можно задавать в трех измерениях, а также вращать элемент вокруг своих осей.

2007-05-23

09:15:21, Action Script 3
Глобальные события мыши.

В AS3 события мыши посылаются только объектами InteractiveObject, которые обязательно должны входить в DisplayList.
Из-за этого могут возникать трудности при ловле мышиных событий объектами не расположенными на сцене.
Посмотрев на класс GlobalMouse Дениса Коляко, написал свой аналог:

package ru.as3.ui.MouseStage
{
	import flash.display.*;
	import flash.events.Event;
	public class MouseStage extends Sprite
	{
		private static var instance:MouseStage;
		private var nullSprite:Sprite = new Sprite();

		public function MouseStage()
		{
			if(instance) 
				throw new Error(instance+" already exists, use SmartStage.getInstace() instead new SmartStage()");

			instance = this;
			stage.align = StageAlign.TOP_LEFT;
			stage.addEventListener('resize', setNullSprite);
			this.setNullSprite();
			this.addChildAt(nullSprite, 0);
		}
		private function setNullSprite(e:Event=null):void
		{	
			var g:Graphics = nullSprite.graphics;
				g.clear();
				g.lineStyle(0, 0x000000, 0);
				g.beginFill(0x000000, 0);
				g.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
				g.endFill()
		}

		override public function addChildAt(obj:DisplayObject, i:int):DisplayObject
		{
			if(i<0)	throw new RangeError("The supplied index is out of bounds.");
			return super.addChildAt(obj, i+1);
		}
		override public function getChildAt(i:int):DisplayObject
		{
			if(i<0)	throw new RangeError("The supplied index is out of bounds.");
			return super.getChildAt(i+1);
		}

		public static function getInstance():MouseStage
		{return instance}
	}
}

Объект MouseStage – наследник InteractiveObject, всегда находится на сцене и посылает события MouseEvent.
Использовав MouseStage класс в качестве Document Class’a или унаследовав свой Document class от класса MouseStage, мы можем ловить сыбытия любым объектом в программе.

package
{
   import ru.as3.ui.MouseStage
	public class MyStage extends MouseStage
	{
		public function MyStage()
		{
			var l:Listener = new Listener();
		}
	}
}

Вспомогательный класс к описанному выше примеру:

package
{
     import ru.as3.ui.MouseStage;
	import flash.events.MouseEvent;
	public class Listener
	{
		public function Listener()
		{
			MouseStage.getInstance().addEventListener('mouseDown', trace);
		}
	}
}

P.S.
В классе MouseStage изменено свойство Stage.align. Если вам нужно другое значение этого свойства, увеличьте размеры отрисовываемого спрайта в функции setNullSprite().

UPD:
Теоретически , после инициализации MouseStage, можно было засунуть какую-нибудь кнопку на уровень ниже чем nullSprite. Для этого пришлось переопределить методы DisplayObjectContainer.addChildAt() и DisplayObjectContainer.getChildAt(). Теперь объект nullSprite полностью инкапсулирован.

 


2007-05-22

23:46:27, Action Script 3
Глобальные события мыши.

В AS3 события мыши посылаются только объектами InteractiveObject, которые обязательно должны входить в DisplayList.
Из-за этого могут возникать трудности при ловле мышиных событий объектами не расположенными на сцене.
Посмотрев на класс GlobalMouse Дениса Коляко, написал свой аналог:

Объект MouseStage - наследник InteractiveObject, всегда находится на сцене и посылает события MouseEvent.
Использовав MouseStage класс в качестве Document Class'a или унаследовав свой Document class от класса MouseStage, мы можем ловить сыбытия любым объектом в программе.

Вспомогательный класс к описанному выше примеру:

P.S.
В классе MouseStage изменено свойство Stage.align. Если вам нужно другое значение этого свойства, увеличьте размеры отрисовываемого спрайта в функции setNullSprite().

UPD:
Теоретически , после инициализации MouseStage, можно было засуть какую-нбудь кнопку на уровень ниже чем nullSprite. Для этого пришлось переопределить методы DisplayObjectContainer.addChildAt() и DisplayObjectContainer.getChildAt(). Теперь объект nullSprite полностью инкапсулирован.


2007-05-21

23:42:00, Flex 2 & Co
onReleaseOutside, onDragOut, onDragOver возвращаются
Андре Мишель делится своей реализацией событий onReleaseOutside, onDragOut, onDragOver.

23:42:00, Flex 2 & Co
onReleaseOutside, onDragOut, onDragOver возвращаются
Андре Мишель делится своей реализацией событий onReleaseOutside, onDragOut, onDragOver.

2007-05-16

08:17:59, Лаборатория Январева
Сайты на Xmini

Xmini - система управления сайтом на базе Flash и Flex. Использует в качестве серверной стороны Wacko Wiki Quick Start (ее я тоже развиваю), благодаря чему можно:

  1. Одновременно вести сайт и на HTML, и на Flash
  2. Делать админку модулей на HTML, при визуализации для всех посетителей на Flash. В результате разработка идет быстрее.

Пара примеров: Официальный сайт Xmini + WWQS - Сайт Секистова Ярослава (еще недоделан, непонятно, когда будет).

Приятно, конечно, что CMS модульная. Плохо, что модулей пока мало - в качестве демонстрации я на вышеуказанных сайтах сделал фотоальбом, видеоальбом и плейер. Но маловато, конечно.

Плюс: есть авторизация пользователей и универсальная с ними работа. Минус: нет ни одного модуля, который бы это содержательно использовал.

Плюс: поддерживается история в браузере и ссылки через строку браузера (обращаю внимание: это во Flash!).

Ну и все-таки красиво :)


01:15:00, Flex 2 & Co
D.eval() - eval() для Flex
D.eval() (Дивал) - библиотека, позволяющая во Flex приложеняих исполнять текстовые строки как ActionScript-выражения. Выглядит он следующим образом:

import com.riaone.deval.D;
var six:int;
six = D.eval("4 + 2") as int;
six = D.evalToInt("var x=0; for(i=1;i<=3;++i)x+=i;return x");
six = D.evalToInt("a * b", {a:2, b:3});
six = D.evalToInt("f(5)", {f:function(x:int):int{return x+1}});
six = D.evalToInt("xml.@size*2", {xml:});
six = D.evalToInt('xml=; return xml.@size*2');


Язык, используемый в D.eval() - это Deval. Он поддерживает все AS3 выражения, включая E4X; он имеет доступ к AS3 классам и функциям, но сам их не задает. Типа, новый шаг в разработке Flex-приложений.

Загрузить можно здесь.

01:15:00, Flex 2 & Co
D.eval() - eval() для Flex
D.eval() (Дивал) - библиотека, позволяющая во Flex приложеняих исполнять текстовые строки как ActionScript-выражения. Выглядит он следующим образом:

import com.riaone.deval.D;
var six:int;
six = D.eval("4 + 2") as int;
six = D.evalToInt("var x=0; for(i=1;i<=3;++i)x+=i;return x");
six = D.evalToInt("a * b", {a:2, b:3});
six = D.evalToInt("f(5)", {f:function(x:int):int{return x+1}});
six = D.evalToInt("xml.@size*2", {xml:});
six = D.evalToInt('xml=; return xml.@size*2');


Язык, используемый в D.eval() - это Deval. Он поддерживает все AS3 выражения, включая E4X; он имеет доступ к AS3 классам и функциям, но сам их не задает. Типа, новый шаг в разработке Flex-приложений.

Загрузить можно здесь.

00:45:00, Flex 2 & Co
APE - Actionscript Physics Engine
APE - 2d движок для Flash/Flex. Скачать версию 0.3 alpha можно отсюда. Есть небольшое демо, а также можно выполнить урок для начала работы с движком во Flex Builder.

00:45:00, Flex 2 & Co
APE - Actionscript Physics Engine
APE - 2d движок для Flash/Flex. Скачать версию 0.3 alpha можно отсюда. Есть небольшое демо, а также можно выполнить урок для начала работы с движком во Flex Builder.

00:28:00, Flex 2 & Co
Прикольная демка Papervision/Flex

2007-05-08

08:06:52, Junik
Конвертируем ActionScript 2 в ActionScript 3

Появился конвертор классов as2 в классы as3. Описание конвертора тут.

Утилита, конечно, не способна сконвертировать полностью корректный as3 код, но поможет избавиться от рутинной работы, переименовав Void в void, изменив синтаксис объявления пакетов. Так же есть возможность использовать тег для определения вручную строк для замены.


07:30:56, Agahov's blog
Клонирование объектов утилитой ObjectUtil.copy

Нам понадобилось клонировать объект. Для этого в as3 можно использовать утилиту ObjectUtil.copy. Метод ObjectUtil.copy(obj) возвращает копию исходного объекта obj. Это замечательно работает для невизуальных объектов.
Пример:

  1. package com.test
  2. {
  3.         public class TestClass
  4.         {
  5.                 public var index : int = 100;
  6.         }
  7. }
  8.  
  9. ...
  10. var testObject:TestClass = new TestClass();
  11. testObject.index = 98;
  12. var cloneTestObject : Object = ObjectUtil.copy(testObject);
  13. trace(“cloneTestObject.index : ” + cloneTestObject); // cloneTestObject.index : 98
  14. ...

Но есть ложка дегтя. Данная функция возвращает анонимный объект. И система не позволяет осуществить его приведение к исходному классу.
Данный код приведет к сбою в программе:

  1. ...
  2. var testObject:TestClass = new TestClass();
  3. testObject = 99;
  4. var cloneTestObject : TestClass = ObjectUtil.copy(testObject) as TestClass;
  5. trace(index: ”+  cloneTestObject.index);
  6. ...

После некоторых исследований и подсказки Константина Ковалёва, находим метод flash.net.registerClassAlias. Который и решает проблему:

  1. ...
  2. var testObject:TestClass = new TestClass();
  3. registerClassAlias(getQualifiedClassName(testObject), TestClass);
  4. var cloneTestObject : TestClass = ObjectUtil.copy(testObject) as TestClass;
  5. ...

Для тех, кто хочет докопаться до сути процесса. В справке по registerClassAlias написано: «LocalConnection, ByteArray, SharedObject, NetConnection and NetStream are all examples of classes that encode objects in AMF.» Так как метод ObjectUtil.copy, использует ByteArray, то наш результирующий объект кодируется в формат AMF. Для восстановления класса объекта, используется функция flash.net.registerClassAlias.


2007-05-06

12:34:46, Action Script 3
Защищено: Закрытая запись.

Эта запись защищена паролем. Для ее просмотра введите, пожалуйста, пароль:


2007-05-04

17:42:00, Flex 2 & Co
AS3 String Utils
Класс с расширенными методами управления строками.

API:
afterFirst
adterLast
beginsWith
beforeFirst
beforeLast
between
block
capitalize
contains
countof
editDistance
endsWith
hasText
isEmpty
isNumeric
padLeft
padRight
properCase
quote
remove
removeExtraWhiteSpace
reverse
reverseWords
similarity
stripTags
swapCase
trim
trimLeft
trimRight
wordCount
truncate

2007-04-26

12:56:00, Flex 2 & Co
Открываем ссылки в новом окне
Современные браузеры зачастую блокируют ссылки, открывающиеся в новом окне. Firefox также не является исключением. При этом (в зависимости от настроек блокировщика) у него появляется маленький крестик внизу, о миссии которого сложно догадаться с первого раза. Так как не все флексовые приложения использую SWFAddress, то открыв ссылку в этом же окне и вернувшись назад мы получаем исходный вид приложения, что является крайне неюзабельным. Поэтому, часто сразу ссылки открывают в новом окне, которое и блокируется. Чтобы этого избежать, некто Сергей Ковалев предлагает открывать окна через жаваскриптовый window.open. Все отлично работает, спасибо за метод борьбы:). Но теперь остается еще одна проблема: во флексе ссылки не открываются из Label. Чтобы решить эту проблему, можно совместить вышеприведенный метод с новым текстовым событием LINK следующим образом:

...
[Bindable] private var str:String = '<a href="event:http://www.ya.ru">www.ya.ru</a>';
...

<mx:Label selectable="true" htmlText="{str}" link="URLUtil.openWindow(event.text)"/>


Теперь все в порядке.

2007-04-25

06:56:08, Junik
Пример для Flex Component Kit for Flash CS3

Как уже многие сообщили, вышел prerelease Flex Component Kit для Flash CS3.

И вот уже выложен пример создания такого компонента для Flex. Думаю особенно будет интересно тем, кто перешел на Flex, но очень скучает по Flash. Хм. Интересно, а такие есть? :)


2007-04-23

10:27:36, Action Script 3
Недокументированное свойство Function.length ?

Как узнать количество аргументов в функции ? К примеру функции изинга, количество параметров в которых обычно меняется от 4-х до 6-х.
Можно посмотреть что выдаст метод flash.utils.describeType(), передав в качестве аргумента объект содержащий функцию. А если мы не знаем кому принадлежит функция? Например статическая или пакетная функция.
Случайно спутав массив с функцией, в убогом редакторе кода Flash 9, случайно нашёл свойство length и экземпляра функции:

Применив к любой функции метод describeType, можно найти это поле length. Оказывается это геттер, возвращающее целое число.

Нигде в доках не смог найти этой фичи.


08:15:50, Action Script 3
Недокументированное свойство Function.length ?

Как узнать количество аргументов в функции ? К примеру функции изинга, количество параметров в которых обычно меняется от 4-х до 6-х.
Можно посмотреть что выдаст метод flash.utils.describeType(), передав в качестве аргумента объект содержащий функцию. А если мы не знаем кому принадлежит функция? Например статическая или пакетная функция.
Случайно спутав массив с функцией, в убогом редакторе кода Flash 9, случайно нашёл свойство length и экземпляра функции:

function f(a:Number, b:int=0):void{}
trace(f.length);   // 2

Применив к любой функции метод describeType, можно найти это поле length. Оказывается это геттер, возвращающее целое число.

Нигде в доках не смог найти этой фичи.


2007-04-20

10:00:33, Junik
Подружитесь c Item Renderers во Flex!

Наверное еще со времен 7-ого и 8-ого flash, само слово item renderer мне неприятно. :) Если у вас таже проблема, то делюсь одной интересной статьей на эту тему. Надеюсь, что она поможет подружиться с этими милыми созданиями - item renderer-ми.
На простом английском языке там даются рекомендации по созданию рендереров. Автор предостерегает от создания рендереров на основе контейнеров (Canvas, HBox, VBox), так как это может привести к проблемам с производительностью приложения. Также не рекомендуется использовать “всплывающие"‘ из item renderer-ов события. В общем, есть что почитать. А главное - предоставлено много готовых примеров. :)
Есть и продолжение статьи.


2007-04-18

23:17:00, Flex 2 & Co
AS3 карты
Даррон Шелл создал на гугл-коде раздел as3cards, который содержит скинуемый движок по созданию карточных игр (например, Klondike).
SVN

10:06:57, Graann's blog
Microsoft Silverlight

Microsoft выпускает платформу Silverlight — «убийцу» Adobe Flash


2007-04-07

18:14:34, Action Script 3
Flash радио. Обсуждение технологии Flash на Skypecasts

Теперь есть каст флэшеров.

Можете принять участие в голосовом чате, задавать вопросы и отвечать на них, а можете просто послушать. Для того что бы попасть на каст флешеров, нужно сделать следующее:

1. Скачать последнуюю версию клиента skype, с официального сайта http://skype.com
2. Зарегестрироваться, ввести личную информацию. Подобно сервису ICQ
3. Добавить в контакт лист или miramaxis, или CCCPirate, и связаться для получения дальнейших инструкций.

Flash cast открыт ежедневно с 22:00 до 1:00.
Хочу услышать ваши голоса !


08:14:04, Action Script 3
Flash радио. Обсуждение технологии Flash на Skypecasts

Теперь есть каст флэшеров.

Можете принять участие в голосовом чате, задавать вопросы и отвечать на них, а можете просто послушать. Для того что бы попасть на каст флешеров, нужно сделать следующее:

1. Скачать последнуюю версию клиента skype, с официального сайта http://skype.com
2. Зарегестрироваться, ввести личную информацию. Подобно сервису ICQ
3. Добавить в контакт лист или miramaxis, или CCCPirate, и связаться для получения дальнейших инструкций.

Flash cast открыт ежедневно с 22:00 до 1:00.
Хочу услышать ваши голоса !


2007-04-05

06:39:33, Junik
Контекстное меню окон - как бороться?

Столкнулась с необходимостью максимально убрать встроенные пункты контекстного меню во всем приложении и обнаружила, что простой вызов hideBuiltInItems у контекстного меню Application-а проблему не решает: остается полное макромедийное меню на popup окнах.

Решение обнаружила во Flex cookbook beta и спешу им поделиться.

Адобовцы пишу, что проблема связаны с тем, что контекстное меню приложения не используется для контекстного меню окон (так как окна не являются чайлдами приложения) и предлагают использовать systemManager приложения.

Если после инициализации Application-а написать строку:
MovieClip(systemManager).contextMenu = this.contextMenu.clone();
то, это сделает контекстное меню SystemManager-а и у Application-а одинаковыми.

Если же вы хотите изменять контекстное меню приложения, и эти изменения должны отражаться на контекстном меню окон, то клонирование использовать не нужно - можно просто присвоить свойству MovieClip(systemManager).contextMenu необходимое контекстное меню.

Впрочем, адобовцы дают надежду на то, что в следующих релизах они сами это исправят.


2007-04-03

14:01:17, Graann's blog
И снова о DataTips в LineSeries

В одном из предыдущих постов я рассказывала о решении проблемы пропадающих DataTip-ов в LineSeries с нефильтрованными данными (т.е filterData=false).
Как я уже говорила проблема в строке 969 класса mx.charts.series.LineSeries.as:

if (!isNaN(v.yFilter) && !isNaN(v.xFilter))

Не буду приводить исходный код тут. Слишком много букв.
При наследовании мне пришлось не только переопределить findDataPoints, но и воспроизвести приватный метод серии formatDataTip. Фактически же изменения коснулись только findDataPoints. Я добавила ряд проверок, однако оказалось что это был не лучший выход. Здесь народ столкнулся с аналогичной проблемой и нашел гораздо более удачное, на мой взгляд, решение. В findDataPoints они избежали многочисленных проверок заменив вышеупомянутую строку

if (!isNaN(v.yFilter) && !isNaN(v.xFilter)) на
if (!isNaN(v.yNumber) && !isNaN(v.xNumber)).


2007-04-02

18:12:50, Korax Flash
Андрей Горбатов представляет HTML-Render

Андрей Горбатов по ссылке http://gorbatov.blogspot.com/…

представляет компонент собственной разработки приближенный к XHTML-рендеру. Компонент позволяет создавать таблицы table, tr, td, создавать списки, и т.д., вставлять изображения и т.д. и т.п.
Всё это - позволяет создавать подробные отчёты на Flex в HTML-стиле с последующей печатью.

Радуемся, и ждём развития компонента !


Предыдущие 30 | Следующие 30