package forms { import core.IController; import core.IModel; import core.IView; import data.DataSource; import mx.binding.utils.ChangeWatcher; import mx.containers.Box; import mx.core.IFactory; import mx.core.UIComponent; public class PropertiesForm extends Box implements IForm { [Bindable] public var dataSource:DataSource = null; [Bindable] public var node:XML = null; [Bindable] public var parentModel:IModel = null; public var newElement:Boolean = false; private var _model:IModel; private var _controller:IController; private var _view:IView; public var model:IFactory; public var controller:IFactory; public var view:IFactory; public override function initialize() : void { super.initialize(); _model = model.newInstance(); _model.node = node; _model.dataSource = dataSource; ChangeWatcher.watch(this, "node", function() : void { _model.node = node; }); ChangeWatcher.watch(this, "dataSource", function() : void { _model.dataSource = dataSource; }); ChangeWatcher.watch(this, "parentModel", function() : void { _model.parentModel = parentModel; }); _controller = controller.newInstance(); _controller.model = _model; _controller.newElement = newElement; _view = view.newInstance(); _view.model = _model; _view.addEventListener("modelChange", _controller.modelChange); _view.addEventListener("modelAdd", _controller.modelAdd); _view.addEventListener("modelRemove", _controller.modelRemove); _view.addEventListener("viewInitialized", _controller.viewInitialized); addChild(_view as UIComponent); } public function checkForm() : void { _controller.checkModel(); } } }