package views { import core.IModel; import events.ModelChangeEvent; import flash.events.*; import mx.binding.utils.ChangeWatcher; import mx.controls.CheckBox; import mx.events.PropertyChangeEvent; public class ListCheckBox extends CheckBox { private var _list:XMLList; private var _item:XML; private var _model:IModel; private var _member:String; [Bindable] public function set model(newModel:IModel) : void { _model = newModel; } public function get model() : IModel { return _model; } public function get member() : String { return _member; } public function set member(newMember:String) : void { _member = newMember; } public function set list(newList:XMLList):void { _list = newList; } public function set item(newItem:XML):void { _item = newItem; } public override function initialize() : void { super.initialize(); ChangeWatcher.watch(this, "model", function(event:PropertyChangeEvent) : void { SimpleViewUtil.addEventListeners(event.oldValue as IModel, model, [member], changeHandler); }); addEventListener("change", function(event:Event) : void { if(selected) { dispatchEvent(new ModelChangeEvent(ModelChangeEvent.MODEL_ADD, _member, _item)); } else { dispatchEvent(new ModelChangeEvent(ModelChangeEvent.MODEL_REMOVE, _member, _item)); } }); } private function changeHandler(event:Event) : void { try { var list:XMLList = model[member]; for each(var item:XML in list) { if(item.children() == _item.children()) { selected = true; return; } } } catch(o:Object) {} selected = false; } } }