September 6, 2009 – 6:23 pm
Все “знают” или покрайней мере слышали, что флексовый байндинг не работает в ActionScript 3 проектах, или слышали что он работает, но при этом занимает много места. Из за этого было написано, некоторое количество велосипедов(не мной — другими людьми, если поискать то решения 3 точно можно найти).
Но стороние решения — это плохо, у нас теряется связь с flex проектами.
Года полтора назад передомной встала задача, использовать одни и теже классы в AS3 проекте и во flex проекте, а т.к. большая часть этих классов была обычными байндабл VO, то приходилось в AS3 проекте просто вырезать метатег [Bindable] или попросту делать клонов нужных VO. Благо проект был совсем небольшим и на эти неудобства можно было закрыть глаза.
На днях я таки решил снова попробовать подключить байндинг в AS3 проект, все получилось и на радость мне все оказалось очень хорошо — flexframework доработали и убрали лишние зависимости, теперь флешка с включенным байндингом занимает около 5 кб (релиз версия)!
вот простой пример кода:
package {
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.MouseEvent;
import mx.binding.utils.BindingUtils;
[SWF(backgroundColor="#ffffff")]
public class DataBindingSample extends Sprite
{
[Bindable]
public var stageY:Number = 0;
[Bindable]
public var stageX:Number = 0;
private var circle:Sprite;
public function DataBindingSample()
{
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
circle = new Sprite();
circle.graphics.beginFill(0x55aaFF,1);
circle.graphics.drawCircle(0,0,10);
circle.graphics.endFill();
addChild(circle);
BindingUtils.bindProperty(circle,"x", this, "stageX");
BindingUtils.bindProperty(circle,"y", this, "stageY");
stage.addEventListener(MouseEvent.MOUSE_MOVE, changePosition);
}
protected function changePosition(event: MouseEvent): void
{
stageX = event.stageX;
stageY = event.stageY;
}
}
} |
package {
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.MouseEvent;
import mx.binding.utils.BindingUtils;
[SWF(backgroundColor="#ffffff")]
public class DataBindingSample extends Sprite
{
[Bindable]
public var stageY:Number = 0;
[Bindable]
public var stageX:Number = 0;
private var circle:Sprite;
public function DataBindingSample()
{
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
circle = new Sprite();
circle.graphics.beginFill(0x55aaFF,1);
circle.graphics.drawCircle(0,0,10);
circle.graphics.endFill();
addChild(circle);
BindingUtils.bindProperty(circle,"x", this, "stageX");
BindingUtils.bindProperty(circle,"y", this, "stageY");
stage.addEventListener(MouseEvent.MOUSE_MOVE, changePosition);
}
protected function changePosition(event: MouseEvent): void
{
stageX = event.stageX;
stageY = event.stageY;
}
}
}
Скомпилированый пример:
Flex Data Binding in AS3 project sample. You need to install adobe flash player 10 to view this content
Всем удачного кодирования!
Posted in ActionScript 3.0, Flex, Flex Builder 3, flex framework | 5 Comments »